From 7b70b5d552b42c3071d95204715c57b509be4ee2 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Fri, 2 Sep 2016 11:44:19 +0800 Subject: [PATCH] Update chipmunk to 7.0.1 --- android/arm64-v8a/include/chipmunk/chipmunk.h | 117 ++- .../arm64-v8a/include/chipmunk/chipmunk_ffi.h | 136 +-- .../include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- .../include/chipmunk/chipmunk_types.h | 98 +- .../include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../include/chipmunk/constraints/util.h | 126 --- .../arm64-v8a/include/chipmunk/cpArbiter.h | 216 ++--- android/arm64-v8a/include/chipmunk/cpBB.h | 52 +- android/arm64-v8a/include/chipmunk/cpBody.h | 288 +++--- .../arm64-v8a/include/chipmunk/cpPolyShape.h | 67 +- android/arm64-v8a/include/chipmunk/cpShape.h | 281 +++--- android/arm64-v8a/include/chipmunk/cpSpace.h | 394 ++++---- .../include/chipmunk/cpSpatialIndex.h | 26 +- android/arm64-v8a/include/chipmunk/cpVect.h | 47 +- android/arm64-v8a/libchipmunk.a | Bin 302634 -> 419462 bytes .../armeabi-v7a/include/chipmunk/chipmunk.h | 117 ++- .../include/chipmunk/chipmunk/chipmunk.h | 222 ----- .../include/chipmunk/chipmunk/chipmunk_ffi.h | 177 ---- .../chipmunk/chipmunk/chipmunk_private.h | 254 ----- .../chipmunk/chipmunk/chipmunk_types.h | 222 ----- .../chipmunk/chipmunk/chipmunk_unsafe.h | 65 -- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../chipmunk/chipmunk/constraints/util.h | 126 --- .../include/chipmunk/chipmunk/cpArbiter.h | 207 ----- .../include/chipmunk/chipmunk/cpBB.h | 143 --- .../include/chipmunk/chipmunk/cpBody.h | 251 ----- .../include/chipmunk/chipmunk/cpPolyShape.h | 81 -- .../include/chipmunk/chipmunk/cpShape.h | 232 ----- .../include/chipmunk/chipmunk/cpSpace.h | 283 ------ .../chipmunk/chipmunk/cpSpatialIndex.h | 227 ----- .../include/chipmunk/chipmunk/cpVect.h | 213 ----- .../include/chipmunk/chipmunk_ffi.h | 136 +-- .../include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- .../include/chipmunk/chipmunk_types.h | 98 +- .../include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../include/chipmunk/constraints/util.h | 126 --- .../armeabi-v7a/include/chipmunk/cpArbiter.h | 216 ++--- android/armeabi-v7a/include/chipmunk/cpBB.h | 52 +- android/armeabi-v7a/include/chipmunk/cpBody.h | 288 +++--- .../include/chipmunk/cpPolyShape.h | 67 +- .../armeabi-v7a/include/chipmunk/cpShape.h | 281 +++--- .../armeabi-v7a/include/chipmunk/cpSpace.h | 394 ++++---- .../include/chipmunk/cpSpatialIndex.h | 26 +- android/armeabi-v7a/include/chipmunk/cpVect.h | 47 +- android/armeabi-v7a/libchipmunk.a | Bin 150630 -> 190000 bytes android/armeabi/include/chipmunk/chipmunk.h | 117 ++- .../include/chipmunk/chipmunk/chipmunk.h | 222 ----- .../include/chipmunk/chipmunk/chipmunk_ffi.h | 177 ---- .../chipmunk/chipmunk/chipmunk_private.h | 254 ----- .../chipmunk/chipmunk/chipmunk_types.h | 222 ----- .../chipmunk/chipmunk/chipmunk_unsafe.h | 65 -- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../chipmunk/chipmunk/constraints/util.h | 126 --- .../include/chipmunk/chipmunk/cpArbiter.h | 207 ----- .../armeabi/include/chipmunk/chipmunk/cpBB.h | 143 --- .../include/chipmunk/chipmunk/cpBody.h | 251 ----- .../include/chipmunk/chipmunk/cpPolyShape.h | 81 -- .../include/chipmunk/chipmunk/cpShape.h | 232 ----- .../include/chipmunk/chipmunk/cpSpace.h | 283 ------ .../chipmunk/chipmunk/cpSpatialIndex.h | 227 ----- .../include/chipmunk/chipmunk/cpVect.h | 213 ----- .../armeabi/include/chipmunk/chipmunk_ffi.h | 136 +-- .../include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- .../armeabi/include/chipmunk/chipmunk_types.h | 98 +- .../include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../include/chipmunk/constraints/util.h | 126 --- android/armeabi/include/chipmunk/cpArbiter.h | 216 ++--- android/armeabi/include/chipmunk/cpBB.h | 52 +- android/armeabi/include/chipmunk/cpBody.h | 288 +++--- .../armeabi/include/chipmunk/cpPolyShape.h | 67 +- android/armeabi/include/chipmunk/cpShape.h | 281 +++--- android/armeabi/include/chipmunk/cpSpace.h | 394 ++++---- .../armeabi/include/chipmunk/cpSpatialIndex.h | 26 +- android/armeabi/include/chipmunk/cpVect.h | 47 +- android/armeabi/libchipmunk.a | Bin 400834 -> 476362 bytes android/x86/include/chipmunk/chipmunk.h | 117 ++- .../x86/include/chipmunk/chipmunk/chipmunk.h | 222 ----- .../include/chipmunk/chipmunk/chipmunk_ffi.h | 177 ---- .../chipmunk/chipmunk/chipmunk_private.h | 254 ----- .../chipmunk/chipmunk/chipmunk_types.h | 222 ----- .../chipmunk/chipmunk/chipmunk_unsafe.h | 65 -- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../chipmunk/chipmunk/constraints/util.h | 126 --- .../x86/include/chipmunk/chipmunk/cpArbiter.h | 207 ----- android/x86/include/chipmunk/chipmunk/cpBB.h | 143 --- .../x86/include/chipmunk/chipmunk/cpBody.h | 251 ----- .../include/chipmunk/chipmunk/cpPolyShape.h | 81 -- .../x86/include/chipmunk/chipmunk/cpShape.h | 232 ----- .../x86/include/chipmunk/chipmunk/cpSpace.h | 283 ------ .../chipmunk/chipmunk/cpSpatialIndex.h | 227 ----- .../x86/include/chipmunk/chipmunk/cpVect.h | 213 ----- android/x86/include/chipmunk/chipmunk_ffi.h | 136 +-- .../x86/include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- android/x86/include/chipmunk/chipmunk_types.h | 98 +- .../x86/include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- .../x86/include/chipmunk/constraints/util.h | 126 --- android/x86/include/chipmunk/cpArbiter.h | 216 ++--- android/x86/include/chipmunk/cpBB.h | 52 +- android/x86/include/chipmunk/cpBody.h | 288 +++--- android/x86/include/chipmunk/cpPolyShape.h | 67 +- android/x86/include/chipmunk/cpShape.h | 281 +++--- android/x86/include/chipmunk/cpSpace.h | 394 ++++---- android/x86/include/chipmunk/cpSpatialIndex.h | 26 +- android/x86/include/chipmunk/cpVect.h | 47 +- android/x86/libchipmunk.a | Bin 325514 -> 412100 bytes ios/include/chipmunk/chipmunk.h | 121 ++- ios/include/chipmunk/chipmunk_ffi.h | 136 +-- ios/include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- ios/include/chipmunk/chipmunk_types.h | 98 +- ios/include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- ios/include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- ios/include/chipmunk/constraints/util.h | 126 --- ios/include/chipmunk/cpArbiter.h | 216 ++--- ios/include/chipmunk/cpBB.h | 52 +- ios/include/chipmunk/cpBody.h | 288 +++--- .../include}/chipmunk/cpConstraint.h | 0 .../include}/chipmunk/cpDampedRotarySpring.h | 0 .../include}/chipmunk/cpDampedSpring.h | 0 .../include}/chipmunk/cpGearJoint.h | 0 .../include}/chipmunk/cpGrooveJoint.h | 0 .../include}/chipmunk/cpHastySpace.h | 0 .../include}/chipmunk/cpMarch.h | 0 .../include}/chipmunk/cpPinJoint.h | 0 .../include}/chipmunk/cpPivotJoint.h | 0 ios/include/chipmunk/cpPolyShape.h | 67 +- .../include}/chipmunk/cpPolyline.h | 0 .../include}/chipmunk/cpRatchetJoint.h | 0 .../include}/chipmunk/cpRobust.h | 0 .../include}/chipmunk/cpRotaryLimitJoint.h | 0 ios/include/chipmunk/cpShape.h | 281 +++--- .../include}/chipmunk/cpSimpleMotor.h | 0 .../include}/chipmunk/cpSlideJoint.h | 0 ios/include/chipmunk/cpSpace.h | 394 ++++---- ios/include/chipmunk/cpSpatialIndex.h | 26 +- .../include}/chipmunk/cpTransform.h | 0 ios/include/chipmunk/cpVect.h | 47 +- ios/libs/libchipmunk.a | Bin 616592 -> 839264 bytes mac/include/chipmunk/chipmunk.h | 117 ++- mac/include/chipmunk/chipmunk_ffi.h | 136 +-- mac/include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- mac/include/chipmunk/chipmunk_types.h | 98 +- mac/include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- mac/include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- mac/include/chipmunk/constraints/util.h | 126 --- mac/include/chipmunk/cpArbiter.h | 216 ++--- mac/include/chipmunk/cpBB.h | 52 +- mac/include/chipmunk/cpBody.h | 288 +++--- .../include}/chipmunk/cpConstraint.h | 0 .../include}/chipmunk/cpDampedRotarySpring.h | 0 .../include}/chipmunk/cpDampedSpring.h | 0 .../include}/chipmunk/cpGearJoint.h | 0 .../include}/chipmunk/cpGrooveJoint.h | 0 .../include}/chipmunk/cpHastySpace.h | 0 .../include}/chipmunk/cpMarch.h | 0 .../include}/chipmunk/cpPinJoint.h | 0 .../include}/chipmunk/cpPivotJoint.h | 0 mac/include/chipmunk/cpPolyShape.h | 67 +- .../include}/chipmunk/cpPolyline.h | 0 .../include}/chipmunk/cpRatchetJoint.h | 0 .../include}/chipmunk/cpRobust.h | 0 .../include}/chipmunk/cpRotaryLimitJoint.h | 0 mac/include/chipmunk/cpShape.h | 281 +++--- .../include}/chipmunk/cpSimpleMotor.h | 0 .../include}/chipmunk/cpSlideJoint.h | 0 mac/include/chipmunk/cpSpace.h | 394 ++++---- mac/include/chipmunk/cpSpatialIndex.h | 26 +- .../include}/chipmunk/cpTransform.h | 0 mac/include/chipmunk/cpVect.h | 47 +- mac/libs/libchipmunk.a | Bin 190112 -> 246224 bytes versions.txt | 8 +- win32/include/chipmunk/chipmunk.h | 121 ++- win32/include/chipmunk/chipmunk_ffi.h | 136 +-- win32/include/chipmunk/chipmunk_private.h | 876 ++++++++++++++---- win32/include/chipmunk/chipmunk_types.h | 98 +- win32/include/chipmunk/chipmunk_unsafe.h | 19 +- .../chipmunk/constraints/cpConstraint.h | 161 ---- .../constraints/cpDampedRotarySpring.h | 56 -- .../chipmunk/constraints/cpDampedSpring.h | 64 -- .../chipmunk/constraints/cpGearJoint.h | 51 - .../chipmunk/constraints/cpGrooveJoint.h | 57 -- .../include/chipmunk/constraints/cpPinJoint.h | 52 -- .../chipmunk/constraints/cpPivotJoint.h | 51 - .../chipmunk/constraints/cpRatchetJoint.h | 49 - .../chipmunk/constraints/cpRotaryLimitJoint.h | 48 - .../chipmunk/constraints/cpSimpleMotor.h | 46 - .../chipmunk/constraints/cpSlideJoint.h | 53 -- win32/include/chipmunk/constraints/util.h | 126 --- win32/include/chipmunk/cpArbiter.h | 216 ++--- win32/include/chipmunk/cpBB.h | 52 +- win32/include/chipmunk/cpBody.h | 288 +++--- .../include}/chipmunk/cpConstraint.h | 0 .../include}/chipmunk/cpDampedRotarySpring.h | 0 .../include}/chipmunk/cpDampedSpring.h | 0 .../include}/chipmunk/cpGearJoint.h | 0 .../include}/chipmunk/cpGrooveJoint.h | 0 .../include}/chipmunk/cpHastySpace.h | 0 .../include}/chipmunk/cpMarch.h | 0 .../include}/chipmunk/cpPinJoint.h | 0 .../include}/chipmunk/cpPivotJoint.h | 0 win32/include/chipmunk/cpPolyShape.h | 67 +- .../include}/chipmunk/cpPolyline.h | 0 .../include}/chipmunk/cpRatchetJoint.h | 0 .../include}/chipmunk/cpRobust.h | 0 .../include}/chipmunk/cpRotaryLimitJoint.h | 0 win32/include/chipmunk/cpShape.h | 281 +++--- .../include}/chipmunk/cpSimpleMotor.h | 0 .../include}/chipmunk/cpSlideJoint.h | 0 win32/include/chipmunk/cpSpace.h | 394 ++++---- win32/include/chipmunk/cpSpatialIndex.h | 26 +- .../include}/chipmunk/cpTransform.h | 0 win32/include/chipmunk/cpVect.h | 47 +- win32/libs/Debug/libchipmunk-2015.lib | Bin 231862 -> 2641300 bytes win32/libs/Debug/libchipmunk.lib | Bin 308320 -> 3179954 bytes win32/libs/libchipmunk-2015.lib | Bin 231862 -> 2641300 bytes win32/libs/libchipmunk.lib | Bin 308320 -> 3179954 bytes 309 files changed, 10561 insertions(+), 23645 deletions(-) delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpConstraint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/constraints/util.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_ffi.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_private.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_types.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_unsafe.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpConstraint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/constraints/util.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpArbiter.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpBB.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpBody.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyShape.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpShape.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpSpace.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpSpatialIndex.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk/cpVect.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpConstraint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/constraints/util.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/chipmunk.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/chipmunk_ffi.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/chipmunk_private.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/chipmunk_types.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/chipmunk_unsafe.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpConstraint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/constraints/util.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpArbiter.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpBB.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpBody.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpPolyShape.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpShape.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpSpace.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpSpatialIndex.h delete mode 100644 android/armeabi/include/chipmunk/chipmunk/cpVect.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpConstraint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/armeabi/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/armeabi/include/chipmunk/constraints/util.h delete mode 100644 android/x86/include/chipmunk/chipmunk/chipmunk.h delete mode 100644 android/x86/include/chipmunk/chipmunk/chipmunk_ffi.h delete mode 100644 android/x86/include/chipmunk/chipmunk/chipmunk_private.h delete mode 100644 android/x86/include/chipmunk/chipmunk/chipmunk_types.h delete mode 100644 android/x86/include/chipmunk/chipmunk/chipmunk_unsafe.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpConstraint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/x86/include/chipmunk/chipmunk/constraints/util.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpArbiter.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpBB.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpBody.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpPolyShape.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpShape.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpSpace.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpSpatialIndex.h delete mode 100644 android/x86/include/chipmunk/chipmunk/cpVect.h delete mode 100644 android/x86/include/chipmunk/constraints/cpConstraint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 android/x86/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 android/x86/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 android/x86/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 android/x86/include/chipmunk/constraints/util.h delete mode 100644 ios/include/chipmunk/constraints/cpConstraint.h delete mode 100644 ios/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 ios/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 ios/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 ios/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 ios/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 ios/include/chipmunk/constraints/util.h rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpConstraint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpDampedRotarySpring.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpDampedSpring.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpGearJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpGrooveJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpHastySpace.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpMarch.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpPinJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpPivotJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpPolyline.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpRatchetJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpRobust.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpRotaryLimitJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpSimpleMotor.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpSlideJoint.h (100%) rename {android/armeabi-v7a/include/chipmunk => ios/include}/chipmunk/cpTransform.h (100%) delete mode 100644 mac/include/chipmunk/constraints/cpConstraint.h delete mode 100644 mac/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 mac/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 mac/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 mac/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 mac/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 mac/include/chipmunk/constraints/util.h rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpConstraint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpDampedRotarySpring.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpDampedSpring.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpGearJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpGrooveJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpHastySpace.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpMarch.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpPinJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpPivotJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpPolyline.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpRatchetJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpRobust.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpRotaryLimitJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpSimpleMotor.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpSlideJoint.h (100%) rename {android/armeabi/include/chipmunk => mac/include}/chipmunk/cpTransform.h (100%) delete mode 100644 win32/include/chipmunk/constraints/cpConstraint.h delete mode 100644 win32/include/chipmunk/constraints/cpDampedRotarySpring.h delete mode 100644 win32/include/chipmunk/constraints/cpDampedSpring.h delete mode 100644 win32/include/chipmunk/constraints/cpGearJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpGrooveJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpPinJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpPivotJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpRatchetJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpRotaryLimitJoint.h delete mode 100644 win32/include/chipmunk/constraints/cpSimpleMotor.h delete mode 100644 win32/include/chipmunk/constraints/cpSlideJoint.h delete mode 100644 win32/include/chipmunk/constraints/util.h rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpConstraint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpDampedRotarySpring.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpDampedSpring.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpGearJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpGrooveJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpHastySpace.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpMarch.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpPinJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpPivotJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpPolyline.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpRatchetJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpRobust.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpRotaryLimitJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpSimpleMotor.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpSlideJoint.h (100%) rename {android/x86/include/chipmunk => win32/include}/chipmunk/cpTransform.h (100%) diff --git a/android/arm64-v8a/include/chipmunk/chipmunk.h b/android/arm64-v8a/include/chipmunk/chipmunk.h index 6337fb1a..d7faf039 100644 --- a/android/arm64-v8a/include/chipmunk/chipmunk.h +++ b/android/arm64-v8a/include/chipmunk/chipmunk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,20 +19,26 @@ * SOFTWARE. */ -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif +#ifndef CHIPMUNK_H +#define CHIPMUNK_H #include #include +#ifdef WIN32 + // For alloca(). + #include + #define CP_EXPORT __declspec(dllexport) +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +49,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +90,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +187,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +210,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h b/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h +++ b/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_private.h b/android/arm64-v8a/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/android/arm64-v8a/include/chipmunk/chipmunk_private.h +++ b/android/arm64-v8a/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_types.h b/android/arm64-v8a/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/android/arm64-v8a/include/chipmunk/chipmunk_types.h +++ b/android/arm64-v8a/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h b/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h +++ b/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpConstraint.h b/android/arm64-v8a/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpDampedRotarySpring.h b/android/arm64-v8a/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpDampedSpring.h b/android/arm64-v8a/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpGearJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpGrooveJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpPinJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpPivotJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpRatchetJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpRotaryLimitJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpSimpleMotor.h b/android/arm64-v8a/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/cpSlideJoint.h b/android/arm64-v8a/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/constraints/util.h b/android/arm64-v8a/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/arm64-v8a/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/arm64-v8a/include/chipmunk/cpArbiter.h b/android/arm64-v8a/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/android/arm64-v8a/include/chipmunk/cpArbiter.h +++ b/android/arm64-v8a/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/android/arm64-v8a/include/chipmunk/cpBB.h b/android/arm64-v8a/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/android/arm64-v8a/include/chipmunk/cpBB.h +++ b/android/arm64-v8a/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/android/arm64-v8a/include/chipmunk/cpBody.h b/android/arm64-v8a/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/android/arm64-v8a/include/chipmunk/cpBody.h +++ b/android/arm64-v8a/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/arm64-v8a/include/chipmunk/cpPolyShape.h b/android/arm64-v8a/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/android/arm64-v8a/include/chipmunk/cpPolyShape.h +++ b/android/arm64-v8a/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/arm64-v8a/include/chipmunk/cpShape.h b/android/arm64-v8a/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/android/arm64-v8a/include/chipmunk/cpShape.h +++ b/android/arm64-v8a/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSpace.h b/android/arm64-v8a/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/android/arm64-v8a/include/chipmunk/cpSpace.h +++ b/android/arm64-v8a/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h b/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h +++ b/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/arm64-v8a/include/chipmunk/cpVect.h b/android/arm64-v8a/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/android/arm64-v8a/include/chipmunk/cpVect.h +++ b/android/arm64-v8a/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/android/arm64-v8a/libchipmunk.a b/android/arm64-v8a/libchipmunk.a index 7c17dc65d4b5785ccf3e68349c4916bc0a41d688..87d379d0164c223e859c9773d2562dc04024c698 100644 GIT binary patch literal 419462 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 literal 302634 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

n_XPS+0zYj^d361v-_3ull6?JVMd-g< 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


o$asM%{9LWStLV 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 #include +#ifdef WIN32 + // For alloca(). + #include + #define CP_EXPORT __declspec(dllexport) +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +49,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +90,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +187,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +210,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk.h b/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk.h deleted file mode 100644 index 6337fb1a..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) -#else - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; -typedef struct cpShape cpShape; -typedef struct cpConstraint cpConstraint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpSpatialIndex.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" - -#include "cpSpace.h" - -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 -#define CP_VERSION_RELEASE 1 - -/// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); - -/// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); - -/// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_ffi.h b/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_ffi.h deleted file mode 100644 index 53ac6937..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_private.h b/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_private.h deleted file mode 100644 index f676345b..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_types.h b/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_types.h deleted file mode 100644 index 9ed23391..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,222 +0,0 @@ -#include -#include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif - -#ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif - -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -typedef uintptr_t cpHashValue; - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef int cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; -#else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_LAYERS -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) -#endif -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_unsafe.h b/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 4428814c..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); -/// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpConstraint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedSpring.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGearJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPinJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPivotJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSlideJoint.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/util.h b/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpArbiter.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpArbiter.h deleted file mode 100644 index 1ccb693d..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpArbiter.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. -/// @{ - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) - -// Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) - -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); - - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The array of contact points. - struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; - -/// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpBB.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpBB.h deleted file mode 100644 index 4e59c2d4..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpBB.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -// TODO edge case issue -/// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpBody.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpBody.h deleted file mode 100644 index 6168b0fe..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpBody.h +++ /dev/null @@ -1,251 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - -/// Allocate a cpBody. -cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); -/// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); - -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} - -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} - -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} - - -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} - -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) -/// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) - -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - -/// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} - -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); - - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyShape.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyShape.h deleted file mode 100644 index a5587ba2..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - -/// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); - -/// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); -/// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpShape.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpShape.h deleted file mode 100644 index 62920c37..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpShape.h +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; - /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; - /// The normal of the surface hit. - cpVect n; -} cpSegmentQueryInfo; - -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. - cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; - -/// Destroy a shape. -void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} - -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} - -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} - -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} - -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) - -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); - -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) - -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); - -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - -/// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - -/// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpace.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpace.h deleted file mode 100644 index 26439f76..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpace.h +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); - - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); -}; - -/// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); - -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} - -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} - -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) - -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) - -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} - -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); - -/// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); - - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - -/// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - -/// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpatialIndex.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpatialIndex.h deleted file mode 100644 index c279cad0..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2010 Scott Lembcke - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpVect.h b/android/armeabi-v7a/include/chipmunk/chipmunk/cpVect.h deleted file mode 100644 index 90855e56..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk/cpVect.h +++ /dev/null @@ -1,213 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) -{ - return cpvnormalize(v); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h b/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h +++ b/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_private.h b/android/armeabi-v7a/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_private.h +++ b/android/armeabi-v7a/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_types.h b/android/armeabi-v7a/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_types.h +++ b/android/armeabi-v7a/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h b/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h +++ b/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpConstraint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpDampedRotarySpring.h b/android/armeabi-v7a/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpDampedSpring.h b/android/armeabi-v7a/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpGearJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpGrooveJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpPinJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpPivotJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpRatchetJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpRotaryLimitJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpSimpleMotor.h b/android/armeabi-v7a/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/cpSlideJoint.h b/android/armeabi-v7a/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/constraints/util.h b/android/armeabi-v7a/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/armeabi-v7a/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/armeabi-v7a/include/chipmunk/cpArbiter.h b/android/armeabi-v7a/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/android/armeabi-v7a/include/chipmunk/cpArbiter.h +++ b/android/armeabi-v7a/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpBB.h b/android/armeabi-v7a/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/android/armeabi-v7a/include/chipmunk/cpBB.h +++ b/android/armeabi-v7a/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/android/armeabi-v7a/include/chipmunk/cpBody.h b/android/armeabi-v7a/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/android/armeabi-v7a/include/chipmunk/cpBody.h +++ b/android/armeabi-v7a/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/armeabi-v7a/include/chipmunk/cpPolyShape.h b/android/armeabi-v7a/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/android/armeabi-v7a/include/chipmunk/cpPolyShape.h +++ b/android/armeabi-v7a/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpShape.h b/android/armeabi-v7a/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/android/armeabi-v7a/include/chipmunk/cpShape.h +++ b/android/armeabi-v7a/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSpace.h b/android/armeabi-v7a/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/android/armeabi-v7a/include/chipmunk/cpSpace.h +++ b/android/armeabi-v7a/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h b/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h +++ b/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/armeabi-v7a/include/chipmunk/cpVect.h b/android/armeabi-v7a/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/android/armeabi-v7a/include/chipmunk/cpVect.h +++ b/android/armeabi-v7a/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/android/armeabi-v7a/libchipmunk.a b/android/armeabi-v7a/libchipmunk.a index 730f5e2939b9f13aa8cd7969328e24195a317532..49b967c7bc53291eda8ec73562862cfd7a948e1b 100644 GIT binary patch literal 190000 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 literal 150630 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

FNOX2jr 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 literal 400834 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
  • ^hM<2@I@Ch+4LfC)m5pH#Yd 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 #include +#ifdef WIN32 + // For alloca(). + #include + #define CP_EXPORT __declspec(dllexport) +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +49,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +90,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +187,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +210,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/android/x86/include/chipmunk/chipmunk/chipmunk.h b/android/x86/include/chipmunk/chipmunk/chipmunk.h deleted file mode 100644 index 6337fb1a..00000000 --- a/android/x86/include/chipmunk/chipmunk/chipmunk.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) -#else - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; -typedef struct cpShape cpShape; -typedef struct cpConstraint cpConstraint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpSpatialIndex.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" - -#include "cpSpace.h" - -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 -#define CP_VERSION_RELEASE 1 - -/// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); - -/// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); - -/// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/x86/include/chipmunk/chipmunk/chipmunk_ffi.h b/android/x86/include/chipmunk/chipmunk/chipmunk_ffi.h deleted file mode 100644 index 53ac6937..00000000 --- a/android/x86/include/chipmunk/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); - -#endif diff --git a/android/x86/include/chipmunk/chipmunk/chipmunk_private.h b/android/x86/include/chipmunk/chipmunk/chipmunk_private.h deleted file mode 100644 index f676345b..00000000 --- a/android/x86/include/chipmunk/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); diff --git a/android/x86/include/chipmunk/chipmunk/chipmunk_types.h b/android/x86/include/chipmunk/chipmunk/chipmunk_types.h deleted file mode 100644 index 9ed23391..00000000 --- a/android/x86/include/chipmunk/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,222 +0,0 @@ -#include -#include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif - -#ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif - -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -typedef uintptr_t cpHashValue; - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef int cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; -#else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_LAYERS -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) -#endif -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; diff --git a/android/x86/include/chipmunk/chipmunk/chipmunk_unsafe.h b/android/x86/include/chipmunk/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 4428814c..00000000 --- a/android/x86/include/chipmunk/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); -/// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpConstraint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h b/android/x86/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpDampedSpring.h b/android/x86/include/chipmunk/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpGearJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpPinJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpPivotJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h b/android/x86/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/cpSlideJoint.h b/android/x86/include/chipmunk/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/constraints/util.h b/android/x86/include/chipmunk/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/x86/include/chipmunk/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/x86/include/chipmunk/chipmunk/cpArbiter.h b/android/x86/include/chipmunk/chipmunk/cpArbiter.h deleted file mode 100644 index 1ccb693d..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpArbiter.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. -/// @{ - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) - -// Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) - -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); - - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The array of contact points. - struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; - -/// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpBB.h b/android/x86/include/chipmunk/chipmunk/cpBB.h deleted file mode 100644 index 4e59c2d4..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpBB.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -// TODO edge case issue -/// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox - -///@} diff --git a/android/x86/include/chipmunk/chipmunk/cpBody.h b/android/x86/include/chipmunk/chipmunk/cpBody.h deleted file mode 100644 index 6168b0fe..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpBody.h +++ /dev/null @@ -1,251 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - -/// Allocate a cpBody. -cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); -/// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); - -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} - -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} - -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} - - -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} - -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) -/// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) - -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - -/// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} - -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); - - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/x86/include/chipmunk/chipmunk/cpPolyShape.h b/android/x86/include/chipmunk/chipmunk/cpPolyShape.h deleted file mode 100644 index a5587ba2..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - -/// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); - -/// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); -/// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpShape.h b/android/x86/include/chipmunk/chipmunk/cpShape.h deleted file mode 100644 index 62920c37..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpShape.h +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; - /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; - /// The normal of the surface hit. - cpVect n; -} cpSegmentQueryInfo; - -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. - cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; - -/// Destroy a shape. -void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} - -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} - -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} - -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} - -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) - -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); - -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) - -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); - -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - -/// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - -/// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpSpace.h b/android/x86/include/chipmunk/chipmunk/cpSpace.h deleted file mode 100644 index 26439f76..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpSpace.h +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); - - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); -}; - -/// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); - -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} - -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} - -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) - -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) - -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} - -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); - -/// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); - - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - -/// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - -/// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); - -/// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpSpatialIndex.h b/android/x86/include/chipmunk/chipmunk/cpSpatialIndex.h deleted file mode 100644 index c279cad0..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2010 Scott Lembcke - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/x86/include/chipmunk/chipmunk/cpVect.h b/android/x86/include/chipmunk/chipmunk/cpVect.h deleted file mode 100644 index 90855e56..00000000 --- a/android/x86/include/chipmunk/chipmunk/cpVect.h +++ /dev/null @@ -1,213 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) -{ - return cpvnormalize(v); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} diff --git a/android/x86/include/chipmunk/chipmunk_ffi.h b/android/x86/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/android/x86/include/chipmunk/chipmunk_ffi.h +++ b/android/x86/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/android/x86/include/chipmunk/chipmunk_private.h b/android/x86/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/android/x86/include/chipmunk/chipmunk_private.h +++ b/android/x86/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/android/x86/include/chipmunk/chipmunk_types.h b/android/x86/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/android/x86/include/chipmunk/chipmunk_types.h +++ b/android/x86/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/android/x86/include/chipmunk/chipmunk_unsafe.h b/android/x86/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/android/x86/include/chipmunk/chipmunk_unsafe.h +++ b/android/x86/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/android/x86/include/chipmunk/constraints/cpConstraint.h b/android/x86/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/x86/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/x86/include/chipmunk/constraints/cpDampedRotarySpring.h b/android/x86/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/x86/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpDampedSpring.h b/android/x86/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/x86/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpGearJoint.h b/android/x86/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/x86/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpGrooveJoint.h b/android/x86/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/x86/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpPinJoint.h b/android/x86/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/x86/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/x86/include/chipmunk/constraints/cpPivotJoint.h b/android/x86/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/x86/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpRatchetJoint.h b/android/x86/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/x86/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpRotaryLimitJoint.h b/android/x86/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/x86/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpSimpleMotor.h b/android/x86/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/x86/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/cpSlideJoint.h b/android/x86/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/x86/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/x86/include/chipmunk/constraints/util.h b/android/x86/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/x86/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/x86/include/chipmunk/cpArbiter.h b/android/x86/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/android/x86/include/chipmunk/cpArbiter.h +++ b/android/x86/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/android/x86/include/chipmunk/cpBB.h b/android/x86/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/android/x86/include/chipmunk/cpBB.h +++ b/android/x86/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/android/x86/include/chipmunk/cpBody.h b/android/x86/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/android/x86/include/chipmunk/cpBody.h +++ b/android/x86/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/x86/include/chipmunk/cpPolyShape.h b/android/x86/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/android/x86/include/chipmunk/cpPolyShape.h +++ b/android/x86/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/x86/include/chipmunk/cpShape.h b/android/x86/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/android/x86/include/chipmunk/cpShape.h +++ b/android/x86/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/x86/include/chipmunk/cpSpace.h b/android/x86/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/android/x86/include/chipmunk/cpSpace.h +++ b/android/x86/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/android/x86/include/chipmunk/cpSpatialIndex.h b/android/x86/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/android/x86/include/chipmunk/cpSpatialIndex.h +++ b/android/x86/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/x86/include/chipmunk/cpVect.h b/android/x86/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/android/x86/include/chipmunk/cpVect.h +++ b/android/x86/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/android/x86/libchipmunk.a b/android/x86/libchipmunk.a index 7ead82e1bee9e266298b17eb48e6608eb6c0ce8b..814ef5de8ee167a2075238788eab2406e176fd25 100644 GIT binary patch literal 412100 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

    F zOI1z&2CPY&SLPX{&mwvq>}6C@Y$7SUF=esaO00v`D8PBhSTq&Y`^*u}y72T}w6xW~ zkjGitO~rF-aE2wd2IFRLMq|ue5Y6(&QtO6d*uklD?2V;xAzVWce>b2?t&Z|(1!~x8 zo|_+B1=F*V=jN{z$362Dup)8(*%H8tIs*2B;?cv&zqcUPaqE3)uF>+>7h41DP>Jst zz%JL8R3A(<+Y5_%;_Kp43lD9j*1o9;*`7jNd$1G|GY#hGLKF#chN+YrT?uHV)Iu=u zHkM9aPs3eXI`!?!XQoD}M}3W&hk&OYX{xNHUZNOOlAq(xt zih#YNboliE4*whB%Qk8oN4_tAY^?sMbs;d=DiTX5ss1RmvhpS1!(DW2bR16X6?5dD zA%hv26eh3pIDn!+!LYnzCm(~V7VQ~Z4qTpjSXBQ2{$dZ}Z{0zmuB;wR1G{pJOGt&=>;b)r#>rzaXkM@76$7{$feKh1oO^A2tj89L{Vr~!qx$X#Nq!4PAwE^ z@4yq}mIvO6lk4`Gu$NWDdRo{&tG3ws!SKG2b*TDn)DIx?>kVwE56OCh zk=dci3)z^7cHKI%pDJ{&<>+Mpv~7j@vIr8p9VrRc=bPmii?xPZ%=@4s9tt1aPz>S9 z%s+&Q3MLCKK~JYQ-`y?~Jb?(p@sF7J-xh8)i+O5fBHV5kzsCa)FZj^Bd>eYvq5uI6M-Z2YQ3Uduv6N&G zDk_D-XE`WUO+G?K(Efc)vcb1I0E7V3906X&%XQF=3PQQ*&dW}BF=7izL6-^pJgJF< zeL~V@WfO{^n2=f^w+fB!g}8H+W57$b%jvlxrT+;PRx^*Hox$~_ld%kT%%PnH6^3cVW zT*!Mhp7b|E@XZ&ID6Nh`W}i^UrhpK5hgL*`R`AzQn?xKC-h_<%1NikfL^#+pM?a*Z zTf;cWvl)MvqbrXtFq&`<0_{Z{ZWgl(0q+)esqxH7q-}8dErpijE6_=`H^CUfep9ec z6#w!SFzq;sv{gv8N=vm~N|j(W?qgBv51P9+u{-2V8ILuVDN`BUlr^IhvN(g%*5Kv} zQek^)jy!|b7p0Cf5-mtTYUqs))AAB0{qnOqqWYF*ufBEJvMa$tsfz4o4x#HLSN4r_ za|K?7h({$QSeThccO{X9*;`36xK&7Q*Pe-+r|Nh$DyyWo>IiPMjxZl0ZB>%nM&$Bo z(>6yWhG`Rqh1?RXs4&&J4U6EWDwE(gM{@fXh90No#(Z~~8?PqkiPCaLP0o|te)|3y zxJ5-`m^NXAyqb(=FPl>TDNRNtw~NojtxWLAsmU_I4KrA2COW~gr8OBArekE~uTGb) zu^3iU;d?}zjNF=@T!(CTwZ~3t{4jg0+d~+);WH8=e92(fvsP~}77cC4jJye|QM(@g z;Pw*yC4&Ie;e>s&dy-n<%a1NE#ip@A$=rXoI4eYXD)(OaLHy?*E z!ff367@nj7<7;gY!~`z>Ws8i7T-{`c)0*sxsbcXhp}ug4WHxUliR2C#GIVe;dqMjb zb?jfAy(kRxL7PYW*97}VTS)uYEbQO%0y$<><_|qg_7NTPN2$$nulX}ae;+1Ks~__o zv>QvX9uq_t}S|=Vo(`VgUStZP`T(8 z3_;}x9-kKwM{Rc=1!X<1e0OXSb9uua^yqP{a|h<(3un(Og@5V4o`#ikKu38gW>@6;D$XoWg0zw9tuu^?cYxgDlwAOgGx;2 zt$aruIxhy4z!n3_R}o>KUH_ZjSse3;T*<&SLCm8LTbAkemTO zqHkgG+$ET~c$v>jZ~}ZOI>9!E?3gdWEG;GgmXu7Lr`vN(Z7gBk5VICdr~<2NS&2Ay zTg{`ggPgTkxfI@&H{z)%*Zc*<Cv>`CfC^r`QKX zR|=~nuflL=P31Fb@Bi$;A0m2`Ia&7{7~wU9cnrv8p2zrtfFh{(Uvi!w`XCm*87O6v z`3iv%zit#%+UrI?!21AHfnn;I6vJg&W~d2xket{Yy@HTTT!lbn8wJu-0Qyb$aG5Hm z?;yBfHir{hQy=Hd+whxt)h~>d{j;4ktV*liFz>Oz4Dm==Ob(*^7a1$qZ8O8f^g$Dp z&T;?hNkEuX6lXD9=L~u$=bgpmKR>>)QjDoFc!yN0MW=tI7+H(2*gYu+#?K>#JOuxc zS^k81XAcS&)%Jq<#m#u6h}96>9N`DJMNugJ=gUu8VnTD?@jKX8dfPe(w0W#4Cyoyi zGJ)w2b{Ah@98Bh{NX@v2){LLCSS?K4aul1@V#Z}9tK?bFxb$!`QOtCUw)TlpXq{;^h4oU{g1l}*=86?P5^i}avY4T+# zO4%zkg{75mRE}HkQIBX3ioZR4Fwaset>^ZIOSiqAN-N&a`y8KrO90x&i`grw?|-Ed zpzpS9`WACtLf@RT2nv03;$kHyb92vdVFnp*28F&SZFK)(fJWftoa1{O6^j$I^XzD9 zIs@J@ybH!xxp3ypPG{hy=ld}4`}{EGGv2D+hxrU>igOx36_b82?WBnq&mOlj0+rEK=fvea(2=_pI$h16s)oOAy`_yIfym%w{ua$yT~~?`;Fqs4`{&(p=SXnAFnONq<+9QP`yrJ zUI;yo+l!|T?}q6swQB=-gE&hx+Hd2B?SpU0t`NBElHh1EXlVw6x+*-N1riA zYKeYZN%fnFYr&|oz}4r$n_lseuSUG*9lr#Igngd9BZtgUwpG@1Q;+F(j!99k1-@fsdI;m07evovHK<4WJo8zHAQghVt#R1$1yCBK#C#!=ol?gw8V~3 z)1z;gqn!%C**7k185MK<3L{92_d$?Rh*3g}!wNte#l-ls3j<#rP2Os6DY45(-$>S} zimmq*43yZ53?O`5z1OHOf&43|&kd#cni(?oby(5kQWv+E+83fgJz<^HiDcHGiq8RG zypBlxF|yH707PLJ6Do44k5uuTid&-N@;gQ&b7eRM5cx0mILP=|n`4g5km12pc!7>z z!1yns?t^|oDx5Ryf;B{>-y5 z3LHMLKyx}6?WcP+i)-n^4%9MpG(mS* z#!{jc(gb@Pfb|8qfYIQ}Po&GGE;GhduPcQ{PbKLgCv3 zeB;F|O(brmh#UzXwdxyL^7p)`nUKzNMsm(+j|_L+ljF|z=R zSziB2{8Cx83U$%K`z`bsh0k9S_2Gqdgt!kfH_k_J5Vl6Jg=;*sn*F#-s)2BGWafU|dVlgUU|Ji1+T!>IaTDI5t-uW@Lb@PM_D+ zDY4ydhzNyn*q$;=g~}|cbyvzRNgwTZEspZBjp^JA+BGkuuj4N&2w^TYE0Ox zmIzit*gYk%+#~#ICgiUGUKR1+&QY$2M@xaem1928x2hLr1%0c1mpmc5cj#N;1EpN3 z25ezM(B-=rUVFKL@+MX%yrzoac$fvbk*KxJj4Z!qzRGJ7Pv6Uj!y z5l}hXZK1=77a%`6iY8U%fgIOi9oqMCV=7C0zfLqwc7F*#do4^=tisX-3}?*p7vaV* zq6u#20EZu-#9PUE<|xm1Hp{u*;XBl{Ir2pSK#X6CQw!ig>rJuvt@F594r{%V6I}SP zoQwe;zc5FyfJx@6vC&dYq990g1KKDz? z=b5DP_svlrmjX1AM!0I$f=kq-sFeK6U%<4%`xk&3ssK_{fa>rPj$P@x z@HUj1Zj3(V5-zUUqS>i{%g$gG3Mm}X6;~a0h=JIkfmn!(XDmRNJRs84c}%V!eAOJ` znqMV6zCHLlVqvCc^|L4!6#hr%@IOl7L}{9Q9-iHxDKc}?WEB?c)kwYkfO+R%$%Lt# z+Vuqb^7j4Voq#ffkSnatw2G}r6m1h{+qr@eRS`j~ihRr1ZDG;|=0H~T5l~U<1x1rF zc`us+*Sfn~9KR_0lU0sf5`Q)GPT&g_i*NtZj!Mb2SZ67dti3`qN5!blQpJ;}zzV4q zmuDgFahTKq`>D#32@sd2;wZ9rXQCe@P)moz8o?H#<;lMs17F1-LLF6YM9j$+)pqs zZ+b<1=Oj$TQJr(y57>dBW8yV;iyPpVuH~5m z7^O%JU~quXnDakPcdlqQ2GJ;eC5ekHEc<*-O{TNMgmu>(j!up8HH#SepdBm0G{57y zj(s_-wc1fSwGX`q>jcWJGbx8j7|aq$JqYVm0ygaWVd`<}A3hp77xMl`uAL~CJ8#GR z`BSHEzx}BvpZqMSecnTHr`wN&13z`y1>ujh$zKd+5#77TpZy6@7U34dw7d4u&o2z_ z3e*%94^LZM81nslmQUa{$!{%oA{sBzS6RR_0_GPM?DFGi0PgqKCj-cRXq7#n}T!Y_4)FO%V{{7$zWe!&PS@cEwKMU-&mfLuaK2sIICCH!1-rwL z-?S#U+5`AY(G~eVU*`K7-~6mP@Ym{3BG$XuG|apa*me8Uc{R=idFp&b@#D8TT>RWR zkK$XPg~dp}Cqd$5$O9_=5yr18$TJ#)(|k#zK6tJ#xh;5(FS#Y?_azg}raw7&j(v92tnp9k z%yySDe5mzUmb|K)*^mXw&&G-}aF^ouHAe@j^Eyh=B7WMsU7N+xOHf4cQ6j3i*l@Xhrn{JEm%ULMY2Bx3VvMjkafsMvX zW9zoA>x-$=P_hD@6I50V^mZ>v#^PHWlKnVYQqao=b0R>P^*8{pexv>fYX-nUjo}=Z z)jhGk!5G9Blrtd?^18wG>jpLqcEz>a82|@$eQ#gi4FlaVv7=m3&IWTL=pESdV3~O8 zqoQ(SwgjiEl1g6CKNQ2^lc^JR+`x2n&B57@o{E$ilq+ho-_0x)Pr$QBs>8QJ;{#h= zGU{kfNP5IYUGZC+k%c19UC})7^hl}*EsNc}A=aPpM$H;4M>lsv(u%u6etr_rPhP(K+_}WWG;>M_IJm&?CT$nHZ@Ot>Y?q_DJ%hmQF3u zak78wQd%|`>J>2@ztNje_B|tZ21a(?-jm2A`K(8g$)Lr9iQWypw`HsA=|SCHi7ufC zh}nfUCH_C~LEQ^SLtc%KFy`J4%l^I>PhccBNb1%5Gi0GAj0L%bSr^NbaJy}L%9T|~XGYebz; zuA6YX`F7Ley0mvIU~W8)v8ii)X};WD?Z)FduP46`i-VZbZ54~xCyXhT+N6d#PJWcOH58f$8a$VY6>A^EFp1j0` zr|H#t@Geo~ZjGwxt@hwm08i5(u738O@x^nj+?S?zpNAgt8eNE*9$(G4%T+;_VT6Fk za&-Z2U9P_2p?7Bvz6U&byMZU>g+Pm!=F9wa^DXO=V^Z?H2)E|@oQK}qy5f--E(D9~ zR~|eP5c5eYT=V?}@Z5YmyHfRtV;jvk2)RjHm%r;6;JO&bi?5yBcv0Y8Ducwo=F68^ zZoY~COWpgx*I88g|F<`hO`-Naw_De;)-`C9sI^J8N-L;M+oT0an?l>%X!?&PrIoY| zX#&Ni5NHD2y+pe!QQW0&cei!fU8?w#BD+i177DGxy2!FDDoQ~VBB)hZ1x5M2KWAp{ zeeRQF!QJ2Y_51yv*S*g?GjrygnKLtI&df87V6U4ib06L4#Rv$Z-88|W@d(7ge=^}vYk zO#XrH>IA;}*Lp@yPid~@` zr;}&>cy@ zMZnowC@{JL-5(_A&hBtF-$l2PKhef#**TAw_pG-O5xWB2(-Uy>fU~ty4;$#d1-Lk$ z2cWwV7|~U^1KkfK@NJP|8@mGC4GFkz;A}0`!v?w+BIey30FD;ezv{ceKpozOi- zy!gC~e<<%u34C)T9Aj6Y`$h=H>COW#&YD2?RN%_$cSA{k(VBFiJ1c?jW8=_WmVoO9 zZXlMwK({$T_a^8DdDR-D+mXQc{5W(!nSj%w;I(7WEhOkZ1YJbA@%bY$y89FOYQY!3 z0-t3UA2?G6rjRM{1-idY z(4BN)sXeca(S4)GS3#JrJrp9|q^m6yT^hJ}d+7yVjyRQrA*Wc5cX@nMe7gI=Cq9Qu z<<AZjsw^4;p#ntX~4ZLAj1_t{qr6! zM12sr_!a2x_Hbz*IS;r2!on5u`dPx_{JZ}`_yQ8~?_>N0SH(ZeKhy<}sUv4%7deJ6 z(3Kl#3hw^psnl^0Y~eYqTZn(68OL`Ejjkyc5byz3cE!U-+aiu3Al2_~d-(T?)`Yc2 zk!Ix~s9$cqLoKRwjkZmEve{e~gsLTNR%PSx<;t*Z7l$^D7zKV(37Ds`&gcwtKGjG1 z70>L9Y%CU1&B4;eUZ@b^7nahcGd-7i?`gPc{PAn_8J|;&rv|D{)5X&vT&l5bBdbm6 zTEstHX4zQziT6nPPfcBF&~A>MwwbdJz^O1x_;LUA)YaZAKBe8;ydppaC!oYHof-Nm zAMjS(blHlD@QVwjtAZKjUwN;_{Itz51%=&72i~dIG*S^;I9D zxnH_$#1MRZ#FYP?sekwInzN;CCRRdO!I^vUtAZKR6Fxw5t+dUcN)Qz`vx@s?73aR1 zBc*NT6OTtY#;yul{cpTqbDMP8iktHL-Was}?@OIbK6GjBlC~L%^Xop=nWU0Ux-{oV z+f2gwbsy_Y($hV><_c+>0mR`ySn^o<52fDc;icoJ6WgrDI-~SM9$vb6+BEJG%CXKU z{ji6ZPMt3HPM4;lYz0f@SzNRqFI_lo8g3l_IVBHII-|7PqckbMJ4%_e{B|b% zC`GZWB4HW3!cLMd0aP$z{yqHBc`667b(o z_)jGKzxMuGOaGD7@5fY-Dd`QVw|l=NrOxDhulGwgo|0M{H}sy0?a{cXYu&bODgQ1t zY|SX&V&PwCYfnXdheT`#MEUlH@aoStF2pt^gz(}ngi?U^5CmV?8W7$HyEnK#hh?uX zLkj2r`DTapAq-y-uforCXaDY#Co0X>Y(E(i!X)!d4)_cUQ0ha z8KqJEZ6e}O-7`(NWU|85?Y37Q5pW;dP0B+@Fsnqx7ejM3Je;o@S z%QmUXKORj-?`115m&|qaHQy0_EpJxtNO4*+aaW{FBdWYIm71sU{#2?5H;uCXe|cBw zl>ZE_(vzjs#EVj?hrOFozPdQCP%hyEa+$n6;ltkn0~CInTqa>%WJvLsd-r;|q`%4g zZ}G17kt+Ot?|;bqpY;A`z5gZexA{wqk2A?%0 z`Rq=m`ft9^_3#>(CSJ@M6y*@y_v8ZiI>L2MV-o*89)F9{f&b0Gr_W$b zQ7-v86Ib<_%=aCn6aIH7-5)R~#jU)WbCBexa=PTF-p*0EiQj;$_^ae6Ui?)2w{b;p zpb|g$cFQHdzx4hH!t!ehExv?ys~Lgv^;w0}xc*Zv?O_#k<=6S8azE|ee^h)^Ds`WC zpYrbSDV}iYzj7CO_d@Sp>)kJSH^~Q$XA|eSGhHg_CyV7LUp%JLXH!qOl{?+Jt_pwF zhpRpn|4R54dVDM7Qg~Qk={|ugyno^2@AC0K^zr}Y{ik|5$$E$7)*o*Y9Qo3GMD0xH ziK-oZgnC!KY>;~rXG-A;?vVWO^=ICnrv8+#Q&o@fFIk?~2``g;d#5nq-c1VcM?GEj zW8wWf@BXt~@I8zxd~M1<^?H?D=>EBPlXUu(?xIx6($gP*?EN~cOZ_;KOZarT!2P8U z|63paWgq@-m5)xDQ~5~uS8|aDhrRz~m6LeAM^k*4cmLgohkpOO!l9>cbp$t6F8&(t zZpIZJ&|13=a<>}4`T@x;Tyjlvz~pg8krc(0=pBTA!36fOtYUCeUdperm#7-FPzrVLwU!H#^;V0*zg|`h;0-?Qz0VHy%tN6V(bo7e31U zfLkk`kaOW`r)vopo$KYkHkH~V7e3u47h!q7+&^HgO)lklUM}=)9gB9hT=^s)y>iK) zC0E^b7Hsa?0rMb2I)m;4=)JCFQRVDagCxwPy1<SeRi61PNFPn_@H(4H09eXmrip;?kc{;k-G*y{vPf+_#t;a@NzFi{>a^E zYV+2P(y_Uvb92ua=X|91p7GvSdp^+?p^^hFz_;`}rT?j~TAqk{U%+b6Y7} zV)AC?&6?M2wwpOKJ`J5tDBtPXhic&Ek@G*m%eSN4vj*GYZEFzvW#!spYdze`>6zB& zfxLvH8*pXbk8f8&i>)x>S&iAd+`VQ9+l+cW2h5{{y9{ht%onJ9Gn?JA5HQM--O|FX zX*t1P=XeS|uhp%C+mf7~HexC9qpMflUB*9m-V2}D)z3Ya8TbKlh3!@Ododa|aKb!O z=f0R3cq6<&vlX)gT01FhojP|UGa&JL<_f~<6~=i0d}cfMaAshxU|R_9RyZdU@iDH# zC2lR;;4OSwS@?}b_~{D&y8wU8hhv4ineXfDbHE0D->cIC@`riQp#%01>4B_l<>SJs z`4fEnXvfBE*ku|0iV$I+=s135Pzy+8FhJS&{Tm~dtx>dh03w}3WiuP#|Hg-^!oEd^ zJ-Op&?)Kj|8*|PO@Rd_X`pKma$ND4RM?O8Ql#8N~4a7M63XK-N!!Sm6-hqXauikf1 zB2FtdhK|TGfWEt(XYkFyQ~s&>hG^uq;swC~k5m=$Iyilw4O|2q=EHx4FXVF>h5Cvr zw!tbUe|Y2`VjVyBD_oXpT;&kAM{&j%hxcFkY8brJL|>-Ec9DURPxGLBUrAal1PSkS z(tgzN?x^bRlWC`;_)6s%ba*i25skdZ@LU;n_tT-I5DD-$-ff^e>O#COK- z)7kPvwP8tRVcz8!I~umL#0d5G>p6@>h6J^eDUwkZpOXdoCc>hoslq((Xwy80N|cak z$lbOkZaKd5&o-R}+os!5H2^vObQRf5+)IR2kxphPvz0a9s;nWf5{R~~ebwvNZP~K5 zw|ZM=Z*}j+&g#u9)l_fYP<_#+EuEV+U#{NTQ@zb*&ea!e?by`0jd8VZ1)qg%tLt93 zrDI*)`MrG|m$h!~xu|Zz*7aMr)xD>u<6T(+1G(%ZA?f;!-P z_}b=O+vmKmZvDnh-JAQiTvTTO-Sce#B>zl}d0f=lyZo~5&RR%b_V(%ze4u(k%bNL1 z7q+cg-qzB%W?|cshUT*uuwX)FH}`Gpt-heMx_j$3J`=d4vl=SZ8#Zm()Z0l`Q}r|J zH&mbX0aviMz0J92RiC}2>FgzEFKe3!NSn2Sk9}6HvV~>LSPQ_!qLv78@XlT-DaWx-ZeK%cLns_h?igYM_*6*Hxm?Q|? zDrpgUe>j?T#@{XZgk*AMD|W@(Z&cQPH@lkq;0LNz$Enk{iQDh`AgfImb#@dnti+f{ zLPp(B>9Hop5rXh;-lel(4T$+RKd2r&0%8n=L3FvSJI+D_+w9+&K~w(Q5@MP_HZ&?B zIDav>a~49*%(YhCh59Lb1W1EbSlh^P&)reGww6H3D*`|KRPLVGUC(1olQU+dCJ1y3V?&JR(Ml@ zUsVjRQMh)f8lK@|c&);3cj1^Pn1Q)GABTZ3Z*Y$jx+r9A9%V!(Iu>HJ0gIh?@lYKe zriX`V;X&4eNs(`MTFQ3VRd0q*Z&xF*(w`wpXHR|RJLoCmnidSuEAm$qfp|;P7sU&!Doh~XIOre zJ8SnYPeqWCzXJ#Q#hE?ut3~C;V1zWpyGG2WmDR2ml*nsQN4aZcJ*kTNjn8j&z%SD{ z(oi5(Ju=tfFQBI^;?eL`I(*f>g+c4&G4MIPKuEw>?eNu@iXwdoE#-N%6~lKI4S@XB zID9qW`w~&f{5f-d;FE2h8i%iTX}l(B-GtEQceJG-giG^3 zo4vXDU$CtRmQSg)xCHt6ADPIsVy!v5k_n)!HZzIy6Tl9W=$6+UM=c!zXal*-ZctHB zqS~+*)%LG|TP|fqDZ6E{!I_G+5+=5vAn=l0ILAoTb&b{^%^oMly(Ym)D-34UCL)xa zY1?2Zhpu$AsY)2iP2=P-Q_~xc6kXEo>=yow;Ammg#T7qLCmQ@3d0mY@7hMr$2EIz{ zuA*J2s9{p3^%tCHh|MY@fWbI?Ed`7&rmAwsdDx=5)LEIbh~3U9q-~E-ILsmO^ke?Q zzAWMaMy!Texe*!x?8$C`WR3&U+E9OWu2maML7Saw6aUo@k!&@zbTXUlbS;65pmWb; zY9Gaswt59r;@i9S~_G;R~ivk)?1y&`j2d^hGgdPElDT}-3twQVcz22DN5RlW&P*fNtKKr z7V?w)&+_+j0@jJ%Ckt10W1r}|rSp21uElH+jSPcVp3aPy&*Ox_wVdD}x(c6N^YVF7 z;mREJW?-24z9NB3Frj6NBgfqp`8)Cg@-DEl|H_d&5r>ji%g2U#!K~lhPjX^ps0pm=>Caqz`@y{rnSNlK4Uz=Y!;}!7FE}U2YKgM65 zUpaeB`~()~qZ$X|^HK3V4oy5aUrl_mDkJ6Qr&hsk0WSZ8!V00?5phxzZVw5f`6y#DLVAG+Jk9?lJkmh5dcXZSp?Z><7|#>ErG{~q{rsa zI5>QCRhhIMTR-b!F5Sx^P@MY&ds;BC$9S-i5mzQ5iwbD7R`+-zAOg{=;bJB{M7n50Zr`-K`BtcAMwXYIq z8)+Wc{;Y-FZ7dD8OIvDGy*tHG{NYOUuSY0^vc}mM+}#n5Ifz7STg+r@+i%UDrWhYB zCbLlsS#RU$QZce)uxvheIQ6r_&>l#UDnlIt)E693V zrwY_e(Q@!pnmb$|WqTvp&fQOiX@T}3&RTM{DFd=m^CTMqtT~cOZ>(~gXOKt?X|9Fw z@>v_q%A0G1yV*u9w3b!I{~zmPjQ-j@Rs5w=+s_fZFMy-%^TmD1f#@TYU46Cf0qfPd zhXg{6SpPjowQ`IG7X)(5HOprR}WESjgbz?7)%5DC@#7K9rokicuXWo*3y3i7_=uz0Hr3nq^nT0<>y4A|)>C6Ag!5iNl6QRR* z99;EpC*Mxk;E%6c z($bsB|K!XoruQ8yY^izXUKP*3DJ0|l#mpBUWCK)J|CO=>iu<9$|3h{?HAQ2qfL*ht zADB%x>2^*6OPFb4>X*}hk zgw;t*yICIgdfe}j8*Hz6+ipxVQ%8KfvZ+gXf5e{Lci~D?viH^=H}_`ymrefxo-Gu1 z31|4Gfb9)-&Ec+h%)0(nw?rAe9l-kZfzjqCg>R!zTcxyInh;;^!~ReK3ny2tz(%R& z#M+0U>v7%Ud9P0|J-L+o2H0bGj*NjvJb2WH+Y*oASvYyp&Wfdz=j|v%qx@B=-njnA zIaa6Beb_ry$%*nVoIJ0hZbG687oD;`5ilOXuQqc>EZRANHTxHE@N&Cn|lqXbWJ|1i30rogwd4+DlJG%tKi1I(v&x z;`A5#uvbd2Hs9@G<88i%@bJCyeL^1U-egVs?jUMZ)?0o0r###>Y2T*n)8CjpX+hEO zt?J-W4|}GEwK~{TvI!aNdWJeG;;P;dM`iM)mc2^4UI|uZ40b)^WmMj~JdQdcDyyfD zmerGR+~{GGIJ9R<*DK*rT|eq!t1N}De;+m}7FNmrDqWH%x|DXB4~xUi@L@{~%E{(= zKI{gCS-myC_BH99HZn+NuJ!R>E5?_`h0sUSUmD#FtAW4Cr@h&yRsGecKkX`zFyTMs zVIKA{aofg4{QojG{+C_>zuHhWd&_iPqg%0jeO5lj&-3wD72}Z;=|8r3)#F+p&vrL9 z+)l1aFPdCg&!hIN>6)*b;Vtn6bJdrY8!&d`*eyQIg0a(VA1lpqpJwftY3kD}5{Xpz zQ+ia*TWq(%)-C0R``E3Jj4rn($5$-9ojrV=g3-!#yzj@J zp#h8+9yj|3a&H|kZo{q=T29GjHhk#fsEiesprDT|MwQ70j)nj1ZRdA&c6PJz!574l z7!{nL;I zBFP6K9yVrll}amykClilxqT_4$l9I<%I<6g8ezWF84HI91nAMEeau)1A%5Og?f6ma zHUL+tqr(%da-ZOo8uzFw8VxWG{Zj8Lr=JK<(5J*DfJ7fDiyMn-!}|4ooBO)f^>(Vd zntHZwK7Zr7?lOa;jt%1jj)fMw+Q>AD6~*we5;b&m81Yf5N)clvbL<^EWm()&nmzk{mv7<-V!6>-VRWS-=oE()py8#s2VIq8V9!dbCiI?KWq1v>y zXFWAmPBI=inx2mxP3*r(2FDw=Tv)VHT`XKYa5Ne!y-{qCrf<-`*HpGmT&~c9r+moozI3LG|9+RWxaEYSRRpD(p z$T&G#zO{$FeaWU%7CM@Kh#pNg#Ee5tyD%4GJT^%$5k8t?0>E*MVkW{zCk(81V{Ob} zdJ)CA5TlU=Sv@|oaUl}O&XwWZh-NiEIttp+%%`IbkHRSON>-CdVi zA8+V2=$5T$b)yiC2lh%REnBaQG7dH_%Ck3j_jPUSeC2$O3HZurn!*_`>p`a;%s{VtpCy$LSdT zWat=);>uMb<*2AJk~j2Rz_#dc7J)0Zs20OZwx?&kk5(MFL~Z28{+!tjm1D$Rust=C zGYz!EIyIAR=AAPaEm^_dX7)6@KGL~y&4!+Jn-Q58_H6Cz)?DvZUY}vnQ{TshYc>y> z>fOj+b9&7I^-sc`MOc8-yNUq!2A;KK=BL)Fg*?YE#pybYzn=Ya)VOe`10y=G1gG`G zS3`Gs0&oJbrqn90^0k$JobG@;u`76Y5f+Erg~!&) zJ#3(Ra{{hMgko2~ca*R=zJB0recZzae0SrImt#BSm`0e&p|zb*4t>KI$M^T+(EUXM zPU~?YPec{@CmTL-d|w&|Uu^>J5ODQEw>+az3A|0j8|9Nh`H-;9IrPZMzZ*75y9o7}1-h~Y z6Nd}yiUBU*o0EX62A{2cdcc71Tn}e!&BUDrob2m_OZ=1fqX~RJ^y^>&E+n};0e1qp z#{&>%c5n)UK3*U5$D#Z71Y8SnW7Wq86L1^G z!M8R6*F8=-+JTFgV_vKr=f=v>m%#VeSR{nwRnF)ONjYD@` z0`39e#*%-l5_FHp=zb(d_u~nCnb#8;yFz(`&Ede82)ME6CT$L$Kby}cQ@c)e9qj%mQD-gqpQqcMT+ zFUO(Vk$~GXPB}iFfcvL$@a;~(9U7+`p9L;njybV%To^0ImlODYIu6~35^yJgBdB-< z{ym$3dtn@WuO)Nw`Vf;fpAA>Q_tpg5BvnT23hlHd0T%%m_Cp9f;Oj}iyK;Cnm)R}b8hSUE!eewBc`VjO(c*bR#FuOGM@#=tinI8YX^mRLLJB{ayP zxe0tzHK~kUfzO)~aMi$lEe03L(V3vTF-G@N-~-+36Zl5Pp?hZn?gVf*k3sj21l|4^ z-H*rUK9<0DV_diZ7s{KZ5yknu2e^mFp!-_j;(Wd_Mt4Vy?)wt>F42Np>_q>3A(q&==Os*@OdbKuU4C1VppL1FA2DM;I4_mh5G%c1l?mXx;udnbe~AzyL}wG z89INQ&xe4!Y7DyXNx(I{F$TnAD96eKTnlhZW1yiN-3hqA90%Vg6L5Qgn?DA=eF?ZH z#=-Zs1l$SW7L0-K$pqYc;*-@_d0)fgSDb(IfLl8TzBhWfFwNQnTy+9Yym@B=?htTs zd9V7_e@>vAc1Vr^r|@uv`dFTTyMG+GZVy-Q5j+6g+X6CN;nV*z4;P|-0bKkFbcZ~g z&tB>U;O4{%67re{F5Z8S)1L1D$&DZ#<}WxU(^@4{`QlZ7dMfof(uOP0l^bX(?)bT> zR6lk3S)Q-sFMQ&&XvXoaZNna5$P{q_ACF~MJpBK}nF(=XW1WeB__RxF;IHOPgmQf4 zizyXm3AF@KQ5>yZ*yuA2$|su@wu?HRzI@V9Q8rT(zsmo?{g;b0>1K|CoNS-Q2+5G=NB0fGt5&XPFd_%%NKjB}P@HZy> zO$q;^g#YY>|D1&X!wEmaA$C=iX@<&weB_e9B?c|OX3(YU|NA!k*OfBMQ-#f}N@cHU-Ix&k@}N_zmV`>pYRVQ{GUkpKbi3FO8EaY;s3LQKR%OE{)UU+QaQj+CM5VS z(@{#p_O66PeUq(G&M8uPldVCOsJzK+*B*++O9DL^^GkwM76<(|B_zOGQ!9y&itwMb zGko-J)?IJ19+nB-QD@eCsu-h(iiFmoGbJ{92)%2c!W;B>i<*-Dvr+G${w{`5`T9b_ z|7Gug2ksPR{$EYR-|PJ{FGX-^mAS(tlUT;uobpUlxB(DxBHj(x00;;^Q5^m!|&R`|mUS%Zhs~o-+UP)Q^3<)?TNuqN?|z zx?KK0l9KJ~l7Cg|553>vUz^g|N4o0xPoa05TNdAGwvkKm7n<#C`Ca??Sn3K7KgrT} zrFMD$Ddyjjx}_|>J9W(amsosH>O0;q889W)oBE0Of6e@trcR;Wb=}N=O6udOTJP7| z!xVboqO$n@)CTXDB%YGmX*TM4v^n$?X7GRQh}SBVXMvshR6jV|=4=?gBe3V~)X`PgR~^EIr;W+$8O$wPDJwr%S! z>`bk@z#ZY??ST4^7)puVrwc{Y#cvf{$f$1&ihxC~7EvWa#@*RpOknKrr+zH#?CR|8 z;oN=?Z_smgY~y2NF% zqfnRcI&~>Z8%j(5*f!BpVA%hO%sYvH8Z}k&{bbbBt8pt)OaEFf>geC&PTcO+cm$_$ zL2%WIM_fvrD}164*NQC&^5Tyu44;C1nr*YFT?P3@q z_piMBP4B*r@m%5az1!(s?Wa=s>tKZ3PVXM}uJ|dwy%tw|d%Nh7zrU7C{oN&(`ujSr z>MzOXHz^)|=H%}2XGn;TP5ji#gZL@^Ui?hL{~_TO!|q*w#dYosq{(NBMvs22Xti zcFZpT?m1hRzZ>CYMS*F84I#9R*3hC6%g{i?GuE%Jk{j)s*{o5P%v6iy+f@1|+2I$K6(ja1QK({tIYEf-<2SndZnyF@NZyPY-CKzjKX zkRQ2?6p9X-Uc_EMxm1FkJ@R4plF8r9H|BDel1}b2(#bs^x^n3ZRq!m`N`B?G!4J6~ z#axHnRsPJ9HL27d`Pca~OV&ddL6YwDXO&zCy!@N|nI#udUimj;&p_^0=AUveX0HHs zlkO$Ia{Ht<+p%lg_=wY5b zypZV62kh}BLjUYK9MuUM0Ran>&g_>>ULdeCec z<2@Vd(FAgWr6aSoL@qF9wdR4$qMz@)Yr@XM(cB;P{b&B?ho7j-cUMi25wk@~k|94b zij=LA1yM3N>%m#Sct)KncCE<&M{E9Q((>JjLeIv+d{|2^Yq(?f3&TZ~HJMLbMuEX2 zE3%eNTv?2Z#I@1+`{vHW6Lubo=KiejKZoYOoc|^^h9(WopRnn{$1h%U^zh?m7OAje zZ3T8wIp86G*Wq8i>6gC++r_H0O<3~6cv;)sncCmrP(Qh&`3DXkudI-DvZzHci>X#K zZTC2_k7nxbzI4MTY#0eWvDN%@mDHa=8#}mdQeJ1xI+0&gwdpPgmEB5M_CgS4&zMEU zXV=h3vWry1t<$+JtvI$3aR8hcwH>*_9KNwsn#(L@5^z)ulqUl?-K< zM)?Ok1FR^sex7fw^361->{aJq0POTxoN<#~Q<-md#6=prh}O7feT}C{nAUw+uk%tP z|A-95ZUT|I!a4 zENWpZF8YG&4ei+Ji$1STLO7=7+J6YoF?45#0Daq;W0q;=6^~|WF(78aD;~wj@3%3y z^;~8ZBfgTZkx{)*GYs&YYwZQ_8UEkr50FgO<-nWW{0N=W?ApmFbGt0=bz-| zSOsh2pL;4(_fX~<9ZBwJ=%z@ok* zh2}%JjSpl7e_^GHK8F%Oj-r3L2{%)#^8Jecv;484*7kV?tE^<0vWZul;gjt0<$jc@ z`)SX`g=GjAXL=OZn3bvhVWw5quGjPqRh|d*_v!QM1P!#%-2F%A%>XG_v#Qc&p~DKE z?B&t-UH?H=$Y@%w5rVlDlq74Xg|tk{FPl2ld7@3yVQAe;cL#an`?X9y>zt)*AN30V zvzJAgTKsMQ#q-6JM!rm=+psHBXVse-Y@juggD>p0+(e(-gX=o3SfG4;T0yv~z{g4~ zSQS|C?M&TcnVm0!cBB(zsnpr}W_`=LuIk2~o~=FaueMosbuZuCZ>wI{(^+kYo3NnJ z*)j9~#JMH0L5?A>X&ql!j<(TQJU(NrgES)bPIXo9R(%CcgQjQg%Wh^97i-m+--}y+ zgpqCC+?I9GPI5f8x9}7-^uoG%y@eIjggVamGqqTgltoFiUw40|?r`RsYmCdwzGm(A zSl<<-^EH~CuYTaWWA;46>v8;N_ZE7lnxR`W!3VM^2OS&xWchC$zKI3-k&9Hx z|E;{*TO;$+`N0+-3ls9g8*%f4-MSwwG*k}aSuW3Ag@&r3rTA(ExDy6&E?&Oz$;>DI z1{LO_!_&#d-zby}?&}3+mYQlYq>GRV4-m3l{PDpNXI;&YGH>6P6a0hERJk)C^7MeH zcIe9vTeOxw_8(Y4=Tx#xEmjEI>0a%Oz_}Cr|BaG9$6xjH9sUmzhCz0-F8T+^M~oFl ze}rHxIAp7al#xv9kSGG~gLCv<*$x#J*xB}L{>UF4b0&j?X0rVdev;%g=p9r6Gj%Uq zax$eIlqdghLp=<`)6YC$tb_T#!GL3Cu%5V!j!xfsbVB~%LY@ml;^u^71+ig!RMxFc_@s`5;%6#Lkh51$a#@h<>C*>RO&>;zpck1Yg#zTc3T2l0}soZ*K+xJl7 zBZWa#w`y!QE@F^C?0shUE8DmS=2-C4nc4$l7}?6S{sdd4KV|eN3@I)C{O~*;2>lU% zM$e(f0fhdfLY7_#j)P|r>qh}&mB^_U@-`;ypTXnHhQj5hFsw)hg~H-V`5~b$EUp}C zJcf1kDh(+zwhVfor1|>H?K{-2ItNH{_;K}*eM*%13KbVMUN=$owd&YhRLf`ubsAZI zaII{(zO0dB!N9L+D08hIG6O$#&3Uj|_|!PskJ+&d?SrBKrM^44ZKh>pH7aBqA1SPO zw9qK=zhe)Xlqt!mu;NgmQE;7mm2a7VEUegDXxu~4LGf91kF} zXK6R{73s`YG4z7_3PWnAWX$A*jet2+&1mA!h}BT2UMTj5?lr82N^c~tC@4L)H6}_> zVeZPb4yuuvj?_kHlwef9qze~~m%f;(MJtLn-%1=DZ~Kw8*{JUZo<;l#!WlcG%{TEt zOOAHzB2?21j$pV#a;5JUJUp~D-w23W#g04hX#ibu8zD4pz}4d;%e7iN{}=EdR8!5= zqDHkzl|nc~`_)#_k5u3=rvFGu#Y5nvR3p12rS8LKu9Gmd!rZ@RT7R6W8`*}8a!4|D zPhYY!Q)k?`q`7dQ1qAt~s{9Gq{J#9k%KR0Rcv=~8yMjKPT{11dWP0JBCDsbfPZnN3 z_nVo)*Hm!oR7~6OXIfwr*^J4`a;r|3bOapw@gD;$EXq0x^eZoc7 zzo%C?Nolhk6O)C7bDz&!1It^>yXb(bjw5yEzEE*sIgk0_cJ76ysIYQseozg(U>Nhm z=kh$)HT6&EJ(`nHUN#LW7Il$X6BDZ-kt>FU67fqpE>Lxu#48L7tx14EQK#oe1tY6T zTfyZ{rztv#U_HBFB5>ePX5e+gc+yVC%zWkCLKCN4%&jcYNEXhmDl{Ql=1wC2I8lLv zKNilNTHqjrg>$Eke48PjoY=5?)HtKs2m|k-kqs}ZwBonV;*dIQ!O9k^mVIi~%CxeJ zAfDp#rI^WTUog3E@S4peBELs>V?;MP{3AM60x&KJ-fqKj3Fm#G#v_j6k{ zkojaA%S0w3IhqB9p&hBADFI_m`}c6aVKcU@mk!z88^J}lL7JhR)qOj2?U&G*Kx!?~ zskiv{2`p2K{4gPkY%K_4;|MGcN1@jCw-vF|JpGwBtH%eb<|8&mL4W%G6Si*#p+OpG6WzJ8l%n4ao9LEt5%&O6?i}I@Kf&s9)QR zI_iUASyS}@c*16N?Tk#h9~ByR;V^(bnz_CCCO2(F32S@o@Nsd@#8&1jhlFi5*d`v! z)WPHIkaCKI+L|#{=x`y#GBPLv6B#uMvvoH%D;{rKraxg(j@Co^@&x1DBbonXk+J)XH{LIvZUI}&YUvS+RF z9w;_mHSuiU9&WzzHmh+Tbp0>OG+E7;mbkEHHj`j{wQ7)Rz}6J&3nxiWkg`O>m9j*` zm9j*`m9j*Wm9m5~BV|d=`04x5CK7GeZ2Fr{0L&Z~N;u1hkfpT z;SLL}FEj|}>_WqI<)NV(Pi3K@2B)gfP>VCE&@clhDm2vNOf59b#!(&?jm`t5_JT9= z6Hq(MV+*{GHdJT6vV=~c&f>>z6L`|tt&tM`tl-qh7?xa%4Xu^tBPlhLI3>_zh$)gw zpf-o-ly1|uQtj@0Kx>Y(h3Yo&B~^t>rm>`a_=nWJ9m~95n#{zXg(Vy(FxBTWtuu>@ z*}36*>xE^LC$h$rGV_8vg$0>l3%i-R-(+@v0~NOapfs6OX7Df`+Oka= z?Hnqt=9)5|e|=tWYV6pJ(EXRvp|Y2f{bdj4m%}TA2(HfGKaK_4!A1?&kzf>KiC6TSUYU8cNZoZYW_MP{iHhPMyH-4?cnuvIKE@wP%G9I93ZKXVrc?Pvmc*LB0c zuYf`6=_t8w;^K!E8&VFq@~XXuiJ)%`HZw(mX|tNb9dcD_i}B0{pBF>>g&pFWabyq9 zmXGD|*8j@1zCdsI75@{eZP!`=8C(pA+&Q>vGKIkbJylZkjMbGic$OR$GJF5$QaRe^h}b}CLWpo?Mxi?x zoaQ}8*bI=_**M8iA9Oi_6`_Bi!?tUE#FWV#jYdOW`%|XC+skdbh@JWNBx#IM`1gw= zfPz0q(KYY$9YSZ|t{HRDKP$%9$<$TzU;!CTFr-Tkx+H{n_scE0Sv+kB{# z$=QQIm(o0_0y&`| z;yf`3sZc!8;gxBgqQamu!INH+xu9?~Azg zUC&xg;lR1VvS>QFKb^nrU|GXpnO%xx$zB<8TQrs1rPJ~!X`+*VA-v=V#o%@lXKLvI z*@OLhY-M`6UrlCYL=$6emrWIxRI+OPbdqE{$q7h?T%Oy9JRTck0za;RE0)7%9%B5sm)(mc zeu&j^ew+$gO}?|cm%F@~Lg4h8%zFOz*uQ4}!;J9JFqIj16B zZegs{o4fk1%-j9wv4*6p?%~8%-u?kNI9s`po_08{rw#nGX^lazVgNN6L4pHwl%STu zExT{A9!>w+cNUK*S*95D^DGW!S|2CqxCzaZxR27Yns4CUkAO|nO6pir*H~RQk=rY% zqK@TXbw=zCDYWii+tEAL>l~xPOsJdE+=Z$LZy-v9wRtC|pP`;(p+hPK{RjB%|nyL+0)sGcDxTN_0qD-7#N zISUe3%RJyhNV)}|?0&xIL5eFRE_DmTElOpYm+}Ub)4Wt{Cn}UJp3uBhbe_<> zR4ks*yp%nj(7fi6!I7(e!8q6ZHU>|%)T1`;OWz@%Iq4=FyH$pbt}OedmyE2}7)O+! z$FeiUVx_Vdr#v=c!|zljr#WaQqrF~saIv)&7VN3c@1NqQ@V4gxEcU*I?iB5Fb*edD zWSWSe`6EWMesYx!jShhy?OW?|!os8_ag}O^;65%C%Dzk9HmoA~mqxCo7(gtTqT z)2m@?teI9?qis_g-ebuaSt8e(Yc+x3pYwysG6>}SV6s|mnEuYogtmj*jdpavNl05} z5YnHsCpc60aAxP6|9bi5{)3w9vqbt%JdiMIBBexbb@f;7Wh5EU+-KPdVr_X0zcO`D zU5uFyi?CuOAZ-Vgc;s8pyLtv@Ux#5sszX_8=vU&s8+ zb6Ur=7C(5%wg1fER5y>iwcquDmdiNhgcM)4!4p;l`pejK&Ah0l+lPPmmtH|rSr91M5mje|Nl)2;mMR{srCl`E#{uC$w_sa=lD|XAk#EMYenNcy4*EJhs1`o5 z>*s-AVD@s&8HMDTeQ6kM9nT&qhO%xF*zm zBH#-`)g-CO1%USFD2Lm81)cmoL z)K3E6{Io1`Gb>w+MX=#yG_N&nR4KS zuhfl&mcVwd1o`b1{GeuJ2loPFN_|nQ5Ki7|w$Ys*^7^k6x;YeUwud>SC>|yn{u9@< z30!L-PNhI~3Bx)ceYlm$OslpVczr@cHl_Pt>l05u8`CGggQr9|GL^u6yz=wXww8NG z{z31tZ+n|WWJwd8^|g_uKQ4yzt=plIzf+wBIE@!d0o)n!aEV_ZzN3_$TT23&01{m16e0}h~KV#qY~ZZz(VKRA$20ue0XKGigxdIA9SjnH`AEIN^EpMvQLO4 z*@RlEgzZMRsVy-<*)gdpn&C)fg$QIUv%2Cuo z5PFsVm8#M{$}K1%Q=V~L5~p;H`bv$Lr*1C|J0BzU!Dg18YPJ{pstP+MU|;DJ0oBKtH z76aE_v)sWsc9D+awtchE7y&YmEeW(dt#(CSHSI(oRkDi})myXBX5xH;nj@U~IO{2T zF=SsT_SST{w__bO3klM`tRI5oFUUO1h15oNT~KZ0Xf-nI2gG+M48YaTvORx8W{Yoa z#PE^^kw>ChC>-aht7e|PSJh7b=j>ZX3Ue0tJ51lvc~rSgHR z20zkHBD1YmyvlXeoMpK534pfNfpfOuq!lT5M!4SXZ|taEjtX67glm}b zvC3!PDMP#cSrR#@UgPug#5smB>uEEV>Qx;1sfK8W@ab(+4j#C#D%&qtCLj+1d-Fs2 z`N~osR=$+k`Ff{<8td3H23QyK0rIrm*bbX5m#TZd6z0BM`Bp|((E`@McB-|7gf9{2 z^0t;Iy`Ahe4qa}XG3Mrel4<2_*BUKiT48b|g5!%x&Scs?k63PP0rVuNKyB@6Gr8qf zEb2eUI?$tlf0rnhQZxmphiH^y38nRGY(CCheKML3jc?P-`Utqt7j0rsmOZvio%L^g zXz4$))RzTWxRu>l$xWXeXV*^3Z=aE0Id$Zy_TC7`FO+c8*WBmC)KfiQL(Tdb@?koN z_*hS0YtElmaH}Y;DrbXVScR~AQeHbevfEJ|qI}ELkw2xUsRipwd_T@7ytg?KRp_nR zh+vEgw6p^Jqu)*&TB3ze7mt7X5K2?Ni!Je&v+0onYdly)8;qKJ{cfyG9bD_#O5SD{ zP-*fjqkPjOJ~9ACpL0a3>6vP}$KAK5-?VJocz++If}tHXWF6MmRESkMR3+~0;-ozK za13s7n^zV4OcmBqigQigCilzmGQI3m^kobJTEJl&TVYn=GTtS1OCdY#il||r@g`qf zMu5gWLugxlH{^HR=tQwT_3ft=jdyUVdB*Nxn+hRt(UfmNIZ0-jsk1Mt`{*0dC)}VD zeLuLoO?*?i&wwhsAf&gC4pbti7Yom zjYkMF#${UhjQOaBMVg$Aj5Z$f`aqh0U}IQ-_dCVg?CWgEe&TwUS))?8VlA4Xl97q8 zt9xG4SZQThdHJS)bKNRyQzVFgy5CYVDF;5!tTXzwcyZM)1DqyR3iY#>&#CtEEVyRF zdSoYGYr^l`{e?zY8*NsRw8j#xfB{zT`N8Rir1+7w24(HbKH~tA>eolOVvEhx@FFRn1@Di@w4aN& z+wK%VhBO1$FlxiJTQC5(iH6mDbGhXN3H^r@tAFTTwb<-j`I%#Bw;Ts#-*(H121wVQ zAWQ3yY|WU#f-+_IyY+xIz-s}#UBksbSEp*Qfw{INf$X>0oL`!#2$DT8RYG79KH)e)It*jPhFw?C&Z@bwx?TT9w}r?mHMwh2^O z77|kKcZ{|U?LVv00H3oZ16+-F3|j8hzHP*6x6dCz%cmDKg!Z8shRJqWKV}P45w~ezp*s_yWtHLU}8`K%J-8Ft+-><_^7HYj*l!v9A;RI zjfscyjYsr_a^D^K9e0+7#aqdUEH6ZTbhL;qw36O7EV{+)y^O5nt@#$0q_v8%kd+O= zDrskI9JM|0oqK}F|EdJ8jhw-N1yg+Ou8K6VjGAu)?T+g+b&Y#7S6}Vw#74`_G|K4n z{e)!d)ShnknOyOy(evBNHZ+$YA{%2t@p+9TnL2uMw(mM+XP~bYwYcv*;%wRK znmq#0x3|&f_wtCVPXaU#GHuuLK-bcniMC+;h#aGs)!uM; zV%zGZ7g=6hHe7W)=cagH^j+m|UBStK`?%0_g}x7qe3S6+fh_J9Rc7}#nfIg;k`k6u zzNx|Xd!Zvmqfup6+v44E-74z-8b_@87S~uo)OfRfZ_{?IOt=93Nht}1rE9@*%&FIz zI=-Ixx6Cz5cz2K=lDG}yeq@UuM&uJdx!HgzG?83yPHAq}w32Mo39qL&@5=w|s-Jn! zW-=D-Ad8XOxP7@ptBv$cS=(bQ?Hlko60>`~Hj9@Kjy)pp%i=1KX`Jv@>P#`?005tOm((2#|qxh9otN z&9@j{30?a#;xJImV>QZ1P0iX@EoPZQrZ~b_Z=axN54IbTHH~zKcJSIeI&Ctu&u=>E zdD8LmPp@&srhK+Xwyzvy|}k+n#_EeveF;g?Gp-IKghIcuYcPL>d-d0?4Vcu zDzkI18$bO%TXNMNRMKYn6L}s)`mCpISgXCUj7o8~ysZ#Zo(J)ZBndTYnxb+iMh&|` z*tT%$m0@K3f= zsDpMSsdc6t8!ukST>T*pMmuhB{bSPs^$8m%TN#B)^H?)y6;YermE0CrakF6u>rx}X z(Ktyi8u#R(@0#d)UBAe#B4^p~<(AEUSmZXND}*bj*~b2nD_(l};q-hs=@TP`Nr!@Bk79k zNkmDU1%%iz%DCS>gSZyPsT(wnevQV^G3L)qbi0`Fb`)5_vemAIHQkuS>aAIe@2o<) zP{&|cQ;^}FdIXT%*>YLGtDXBazB%$;vKfC({wT1u{F&-s$#lGisrd8>PctPVtcrPe z<;yqh6gWg{@+Wbx%{Nuz%)p=lPQ9kv;Lr1EKZx^9Q*qA9H%+rCa{dI1k{E8|y$!^s z=YNU?wR@f!7QX-8)zA7u|A+Wr$^Wb1(sMvrd{97Pdd=ObMGF?Zzq)qOk`-^So;`DJ z^}Fk5&90yG?lY=uyL&o&u$8=STj$$>ovH*}6Fz=kYQp7J6W%bXvhq6mUqsk+i*dGM z^{6o8F76*IfJ=N`XiurspUG{QTs4?(m^|s)iiXM2HI)sMr|x`B`s$PKo*XsYJ9$#W z(aBW}_e`!_z}6!>_p)DUxOA?#OS?d67ZlSjom^8fb;8M$r#66MK@7#BQ_|f&IF7mD z6wA*eh86p&X&x40%xO{d8tfo8M!%QtyF5B6-M2leNcZ)go2lsQKB?mM>5~rw({Ojg zy$wej?pXj6nodbgBWbnr#f51{%iqrQ(#hgME&sE8+{-?0Fg^dZuUULe#m>s~gC`5s zJ>c>A+2~<^Sq1Pb=I1|NGb%rePf1B-xYgtNh8S4Fv%t!=zzVh?Ua~c#G0i`v;=d-0 z!oTp8^p{5kHl32bbW|Yee>yt-{8Lhk$x^V-U-QOSm%mG@4F7@{=i!(;Q~M^>9oIBI zD{*ZD{w}z-;+jgD)PQlA%7VwVCbh%+J^c5SXsmX)bn@Ety{;w2n~d6T6>5gAH}DC2 zjIWEwY%l4(qnJW-v3A$u@qFmj;Hfx!G#@GbS!CfxkLMv}YP_=i-5A}1jHsVJ;?q|u zy{?(tF5BF@?gHH29_MZhPraSnds8zz*7dGS&AedSw$w}o%|1H=>yI{LTwEcW&t&BklMx#l$UJyDlqFiQICOM@N-s*(Yo4 zxUdtG>w-?rEG8Z+vOKvf*z&DDld-g;W44NKV(P4!oHEc8^Kz6x0`1nWu1&JQYPRv> zSQ8P6WXAvHTOI9qvP49Avc{H%^E%h}^WP9spy zUfdX-vEWW8P;_1iZU!)~hVGIC+&uhm3%M{SdLEt7ca-gSUFw?Y$(Sq349sp1+gp8mGuEVhipZ_nO^B(Lwor;KykWz zpj!)!_$Pfe(3Lr}IKE7rDZnXC*93H?I9vpr>8LKcSl-_N6sLO(x;FzOx{?)vuFiLg z@rwM$u%m(9Ep!=l+Ts?56AA8_HcYlKJV(8WaBf6*a4|H`tmT-r5I(Z(R*cIsh zAORQ6^SZT%4Rjw*(Cvn5FD35{e8<9Kl{M7?zx_E-_sldhgd`FD# zyJB=_C-806z!SRy-DL^5Zs1IJ_pqV7%?Y|X@=^U(e6Hso%B%B4gd4}MwFsda|1784 zKd(#Rn+CqnUL-pMzU?006rXMYe4-mJ!RbGkfZGFH$h%r$x`5aZ~GqTVFFh-NH#YT<@d>YoA<;$n~Z zN>@C5^f}6L%EBL~Ab%*e!&jlhDq>d!y*1Ps$c|tv-e8}N|%kO zq8I0^{3jRBdiXPgm*!HsDpHe59-b;V6(@9G=_YAAC8q>3);Y`{@zK&L(q%1D_(H38 zKozOqFCpV;taF(W=XR-?rBfQQOIJmT14?3-&S}2P`!yz~%X*IR|6vST{x{g!+6vTI znzj+L1X7XG;z;Szxy_&QUX6ii8`Rj zG{m^SKJ_i{t-+mOr~bs_CFx36g+GZTgjA&78y?LaeeSa~(9)%IpMP5N@-#d3Joi#B zo1J>GEdITz-J9iyy=HdmH2hOT z^r-T2uubgJxv8fEAFe6s_Z80(Rha0UAB&g2GvVKw@JoLVm*B5W_&*!>(?`QPrN+Q1 z8rjMYph>xTec9@cpLLgoX*HlMV2rh!utX4M?ZqPi+$u|mc5W)R01{i=(E3GeZ6c(x z#fajvK)ElFo8Pyot9R3uBGsn8E$dlAJ9mMdDrrYf+F6r!yyPr9pK_KRGU*ScbjMM; zqbbk$olcl69zz#9a;HG0+mIV<;fU!p)Yza%oPGnn=WiY7&2FnCx z;?_xN-fd~hZE2Gx+>|D?rHR1-n}nn;B`Ha`iOH*WAc^zf)sXmpfBSJ}&zTv^ygu#! z|G8T_vtMhkwf1|Tz1LZL-q`RU6bmq`2G@+Nu=^H;jSY8qRF}I0j)7afsgCulW`SzL zHMbl~xaL-cYfe?TMp1>|rttHbCut)|7AFs2*8$u~J5l%sXJeUk>K96sL@Gk{2WrZ*MLNGL0y)+lpLJKVx_xB z_B`@0e&@r7Z2aG4`c3w*Kfr(>{~yVQ-k-|`ZZ%_U-GW5o?_}eD99wjnj<(_dc#KVd zEEyG@P1wTsOKjaGrP)aNc>}ic^B0bvf0qrNCuM{881aLhkqsXw%LbqB-j%I2n(WWZ zCjQH^f&aD(zuNKp0r3gkmz{k`Ht^HLFZA9ln{2J08i9G<5Gp6X!mtQ@2m1d^PsbrRs#oL6S9eiZG(qmFnClBb(E>;PvD~|8+@>3 z;9$qVX?CikOgm)*ms31+-;b^S^oc5q|1oUQ|A!j<(5-~$Vwe7Am;RH^);pW{yi@71 zYh1gI^F0B4T{}ORDwqT;QAKB`I*bjAi7Luk^F&pP?YwGpxzsU*&SUZ1C=t4ZZ2)ry6=oWW&$L zWuFON+2?Zia%-l@M0cZgl)oFT17i~m9DC!!p027Y7;vVFMqBVv2I$F>vBlM#n9s4T z;`I(9`#he|>S9 zeUq^6&Z?pklW78{@6M`r2vZ|TO!n$FtMu;dtR0h2p2vZFcBXzZ4`!RHc4wO{Bqb=w z=|wCWBH3gVX8pA>e<2NQz5tAvGBlD+-%K_UnB28?aFe+nH?wx*hVjhR!J1Bp=ES%-OymmW#b!% zuIFmkceE^6&sEMXXN?V=J~}uye*NhqYp&jK`i8NUEi2cr8y{P9bqnxg>(>mOzNzD! zmX)j5jIQ0d?j0=#fQ$FmaXd80xf!=sFGVOlR4z%@xdKh!BaSz6CR& z3JX;=)W~AV7&KAMNHmy>ik#3OpD9MJq;&zoiMEl1s9maxE4so+RcTCEAG4rPs1F6Jvwt&qQWM7ZJ3RpT_)a!+4$Bn@iq)nKL93!s#CNjUOFBBEDOBl#{BfA zU9YrkiJGX4#u(lbj4?K6-nU4OWNXdEGcx^1j_g8mij2ZWjjQlp zrLc)IVIPi#X$bt33)7sN=$uh|Ih4fHmt6QQvJFq2mZw&PPa>w~O%slT4mOU%sH-LJ zNN}{f0*T}3ap6?u9aNY0XNQ5MPrE^Y~PbMui`?)<@JurWb}p$IF($ zo-qm=a_N28%aC)>D~}(kJBJyv*CRDx&S)#gM8XOoNY~hK{EXP+wNa(#%0Av)`(8M% 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 z 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 literal 325514 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 diff --git a/ios/include/chipmunk/chipmunk.h b/ios/include/chipmunk/chipmunk.h index 6337fb1a..59197476 100644 --- a/ios/include/chipmunk/chipmunk.h +++ b/ios/include/chipmunk/chipmunk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,20 +19,30 @@ * SOFTWARE. */ -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif +#ifndef CHIPMUNK_H +#define CHIPMUNK_H #include #include +#ifdef WIN32 + // For alloca(). + #include + #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) + #define CP_EXPORT __declspec(dllexport) + #else + #define CP_EXPORT + #endif +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +53,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +94,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +191,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +214,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/ios/include/chipmunk/chipmunk_ffi.h b/ios/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/ios/include/chipmunk/chipmunk_ffi.h +++ b/ios/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/ios/include/chipmunk/chipmunk_private.h b/ios/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/ios/include/chipmunk/chipmunk_private.h +++ b/ios/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/ios/include/chipmunk/chipmunk_types.h b/ios/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/ios/include/chipmunk/chipmunk_types.h +++ b/ios/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/ios/include/chipmunk/chipmunk_unsafe.h b/ios/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/ios/include/chipmunk/chipmunk_unsafe.h +++ b/ios/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/ios/include/chipmunk/constraints/cpConstraint.h b/ios/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/ios/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/ios/include/chipmunk/constraints/cpDampedRotarySpring.h b/ios/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/ios/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpDampedSpring.h b/ios/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/ios/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpGearJoint.h b/ios/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/ios/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/ios/include/chipmunk/constraints/cpGrooveJoint.h b/ios/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/ios/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpPinJoint.h b/ios/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/ios/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/ios/include/chipmunk/constraints/cpPivotJoint.h b/ios/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/ios/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpRatchetJoint.h b/ios/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/ios/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpRotaryLimitJoint.h b/ios/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/ios/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpSimpleMotor.h b/ios/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/ios/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/ios/include/chipmunk/constraints/cpSlideJoint.h b/ios/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/ios/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/ios/include/chipmunk/constraints/util.h b/ios/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/ios/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/ios/include/chipmunk/cpArbiter.h b/ios/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/ios/include/chipmunk/cpArbiter.h +++ b/ios/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/ios/include/chipmunk/cpBB.h b/ios/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/ios/include/chipmunk/cpBB.h +++ b/ios/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/ios/include/chipmunk/cpBody.h b/ios/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/ios/include/chipmunk/cpBody.h +++ b/ios/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpConstraint.h b/ios/include/chipmunk/cpConstraint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpConstraint.h rename to ios/include/chipmunk/cpConstraint.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpDampedRotarySpring.h b/ios/include/chipmunk/cpDampedRotarySpring.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpDampedRotarySpring.h rename to ios/include/chipmunk/cpDampedRotarySpring.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpDampedSpring.h b/ios/include/chipmunk/cpDampedSpring.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpDampedSpring.h rename to ios/include/chipmunk/cpDampedSpring.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpGearJoint.h b/ios/include/chipmunk/cpGearJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpGearJoint.h rename to ios/include/chipmunk/cpGearJoint.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpGrooveJoint.h b/ios/include/chipmunk/cpGrooveJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpGrooveJoint.h rename to ios/include/chipmunk/cpGrooveJoint.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpHastySpace.h b/ios/include/chipmunk/cpHastySpace.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpHastySpace.h rename to ios/include/chipmunk/cpHastySpace.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpMarch.h b/ios/include/chipmunk/cpMarch.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpMarch.h rename to ios/include/chipmunk/cpMarch.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpPinJoint.h b/ios/include/chipmunk/cpPinJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpPinJoint.h rename to ios/include/chipmunk/cpPinJoint.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpPivotJoint.h b/ios/include/chipmunk/cpPivotJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpPivotJoint.h rename to ios/include/chipmunk/cpPivotJoint.h diff --git a/ios/include/chipmunk/cpPolyShape.h b/ios/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/ios/include/chipmunk/cpPolyShape.h +++ b/ios/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyline.h b/ios/include/chipmunk/cpPolyline.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpPolyline.h rename to ios/include/chipmunk/cpPolyline.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpRatchetJoint.h b/ios/include/chipmunk/cpRatchetJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpRatchetJoint.h rename to ios/include/chipmunk/cpRatchetJoint.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpRobust.h b/ios/include/chipmunk/cpRobust.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpRobust.h rename to ios/include/chipmunk/cpRobust.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpRotaryLimitJoint.h b/ios/include/chipmunk/cpRotaryLimitJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpRotaryLimitJoint.h rename to ios/include/chipmunk/cpRotaryLimitJoint.h diff --git a/ios/include/chipmunk/cpShape.h b/ios/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/ios/include/chipmunk/cpShape.h +++ b/ios/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSimpleMotor.h b/ios/include/chipmunk/cpSimpleMotor.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpSimpleMotor.h rename to ios/include/chipmunk/cpSimpleMotor.h diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpSlideJoint.h b/ios/include/chipmunk/cpSlideJoint.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpSlideJoint.h rename to ios/include/chipmunk/cpSlideJoint.h diff --git a/ios/include/chipmunk/cpSpace.h b/ios/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/ios/include/chipmunk/cpSpace.h +++ b/ios/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/ios/include/chipmunk/cpSpatialIndex.h b/ios/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/ios/include/chipmunk/cpSpatialIndex.h +++ b/ios/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk/cpTransform.h b/ios/include/chipmunk/cpTransform.h similarity index 100% rename from android/armeabi-v7a/include/chipmunk/chipmunk/cpTransform.h rename to ios/include/chipmunk/cpTransform.h diff --git a/ios/include/chipmunk/cpVect.h b/ios/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/ios/include/chipmunk/cpVect.h +++ b/ios/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/ios/libs/libchipmunk.a b/ios/libs/libchipmunk.a index d413263c6c837d4ea215e5888912be3f9645f989..d51015d8082b92c2a20ec0eec9e5070dc95efc1b 100644 GIT binary patch literal 839264 zcmcHi4SZC^)d!Bx-Q9#`^TP5XjRABMkcL2T6VW0fZZ?}s2m~Tft5PMKWW(K%O=1$P zSZ$Yp7J+DZ(JE>URw*KAQ0jvyCMdNC;*(gOmIB(fFBZveZbB`r*1Es%xp(gF&6~FW z|L?b-+?<&+?`O`OnLFpq++$xKe2Xz=!jp(+IG$UX;iD8l1D;`cjPTboV}XJbG~96G zt;~4bOyR&$TE^n9T93FLgiD+4t}Bz~SSDs)onyDfe%Ujwz4p56W?pyg^)}nJ_8bJL z!P$2Ebu(tzY}q*oSE83#mM@>ap8rg!+Sa0&f!50PjlGKVS-Uje+7rx9M0u%8HY6-uI2D44qG`q!Qo#x{G3B0 zs7>`7&!L?|Cx^>9T*cwT9KOimVGd7mc%H+5b4YY5&Sq>Rhc*tABNHry2`z2$uMldFg7T9UPQ&$S?34h$ki$w2f5PEr4qxQ(Hyr+n!>>5J0(7MEmTuTZu$9B#aQII^>WAT0 z6{d4|1BXjFT*2XL4!3alB8Nu+Gp-fbNe=(Q;pZG0(a#h90IH6 z@IelL&f&`(Zsq-W82+P+1@-}l&vN`;4i9no0f(P(c!9%zARY0a3H(Pel|ws+c^od` zu$04lIDDAHHvox$Kj83F4!`EmI$8}+(9 z=Wqdsr5yfi-P!;d%&aTwt+6>^p6Hl4#dE+=o~elH-& z-}^b-%Hd894{&%6kmU2fI2?`nhWt}Gyotjl9C|pso5P1W+{xiV4wvwGv!-E_)B0l@Efpu_yfWs7? zzL)!_a=-ZswO%gnPv!n>4(D+A0}g-0VKav>a`+a9ogB&>cJTVfU8$Bck;Cgb+=lwL zG#S`V4*!S4-*Q;QV0;{3AR(#iq7vCWkk3SkB>(IDC}D7dd>7!#{B-^8DBF{Ihs{ zXL0xs9&aA}9q$`h1&8-?_%LAehX(cw4)=2S1kbM>{^e!0xpf}5SW}nhtt+eY=n%y< zRjYO0C7u;NPjv%foHgaE^W9}qZe6Lj!Be-qRFBN7sjhFRb9<{B`r?;J?plwE%0oVN zHQsWRsuhA%cYE$BSXEU;c`c}^shw9{?zzWPPu?O=eZ6~yQn#WSsss``Ywl5kbpD(^ zh**1~X|%$k2wj_&)Vj+&PUp?5JawzpS}GW7CN;Mos(&M+adoX!aK$wsME^{Au>;UV zAszA-PhGvYrg}+3ows@gwT;s|x3;!wbsj3_DWB)7T~$@jdrj#KC2$}*&s|mZ18-G% znY*ss=~>~e&edf&AkaBPU~x@-!;+e+yFEjtjz$#lP*3|Rp! zT%UffrvY8)Re6ci5IFQ7gYag|YR4t5jZ(pU?g6k7J3IQuI_qY6aJ?qKiHC4c>-T12a_^OBoHZOqZ;xs{q&D;;E`B^EU9os&D~v z|9-uv&gE`!>*_XdMRiS`o>}Hqd-d&}S1)?&>NUdX6V@;G_-gL%)2L$fRD-8h7Yjrj znx+UGgj&E3-eLp{-8uvg(z>NJ4eqLeoUfqg=j-bE{ptn@GOt{Zsx1dosfarFYNZ+8 zYEEt-T%IaVgJ)4`Wi*Od=ZVE94@rt>=t9qrqVD1vP9)@0ysBP_U2NMJE*&rs(N}jq!6?5y{ck|K2(8LB55>=`UsC1q)bfdkikt7P_B43Q@~b^{E27<`aLLjdB`>Wh8sj1joRrLm zrbjsxxFtl3C_)h}o`F59;`{V1n7&Vcs{XQLWT z1c!bEBCu~y5<=IL@b>RXptOF`h^RviEJDTfua%1JpOMlvOKX&lqRjJZs;a!@3SY%Y zt{Z$Yq&ARZ81N5qf-;Q_z$z12A1p5lN%-8`Cp5pV4y!n?TNz1xLUb~`55CBK&!F*v zkM?Mv1ku%q)<1ni`BG!h!06!YlSJQfu>ft{#4zZ+Z)iM1hiE)P25qE@AEc28_=ZMO z=#Y&>;1JEJce#DFo^lddb*q=uYOBwI*y!XjFbJ$dNG?AH4X24eI+_QKp_Z+VCasqS zkJ#X?sHnzU0&)1j7+MDn4B@hBU;wB?$RX>G@NcOp!)k! zUqyoMxz%M-O`S4G)pqp@Q3h(ikO6ItrlD3Y@Kmo*m%jaysj(Ek?At%lBSjkD?fKP_g7z zU)l7?#k4%=lUAcpG!`dM)Q{>6%!-<*Wu@n&xpg%)cY9(rjCo^qjNzheq!3q^76GbH z;jh60`lpCCBbK|?kQfHFR=c@>Y6J{kUNk^SQQ)qZfXS=jZ*APKt;xAp^j2YoM?{Vy zs+G3@&CA#H+&ixtuTV;Vas;n8_o?d>U2dp=%TwWARn>5dyGmWjA!-9eC|=UE*))a$ zDVHkmA&S(B;bW!nq{w&Bh}!E{5vkM*@M2GOQ9Mg(DwKNb8KBr(9qoP19qoDz5$$)S zdk0_@TI;YbZ@p5EhSK_4^Yf-?UNl5EmTz*ZZSQ*CQ34=P$hd@X@KFAD(-O3i=R@5PBSMw;qMcN7r!u@Pihp&_!t! z6__V^%2qD%uBi5u(=N1vif$jzt5;W`3$XK{BZ0Cijp1Ts=obJ|U@fgQYmgAHvS-)7 zfM}!prO+DQ4~@nQQ3QpkMX1}*eVJ8C^k zX-(Z=VY+f@Q(f6Ccd9ifzfK@3?bk%1;-PkPX4L$;qzI*VV1+Q075sy2G-wHxw?Nv& z*LDE30GFp4dqjP*$*;m8#MFkh_LZX4P5vV9GqS^7j>W}P8J9O~i1VTW60ueI|BoMIu2t=6v1Ol!P zf#B~)4#EuFOjlZppaHE{w_2i&t>-WMgwTucB{U^^ifS4-;bY#Y)Y3%(CqaU$Jrau< zC3Fm>4V4%Mb<~pfDW7(FqKl;^QD3a|D2kXq_TCta8pW%FM<1VyzCLle(2L=s)sLps zY9B?Q@`Dx~#rG>3_yI)|j>}ux-=Yy$;I1yOf(oQ&VNHX?-{X~)IJUr}BbbH&{829C ziIkp=hH3gtJ(e%@zbT=@J^D17{%t@Z+Imi@9y+iA+SB?zb<~it-i>Cg1@$dXFX5;m znjSNnY~XIXQaYjg=A@1(_U8fqT;e@U&!Q%-MB^-@ihvXG93;#H7dlvOQ{ zhE;aGsmMXos2kUPdIl}*BOa(#QKnZs_1Jq|sV?G`QnUd;fr~v}QgipExE@)L&6Pgo zX@Su#bR|#qU9?|BXzcoJtLx(SEfV8r@D9`m4Az1A@ID=gfd0J%RR3NA>Kl5ALI?H| zu;0*26spjs4>5op&`Uso9t~c16}`~Yz@Q|#Q0U&x#jxJrS7)JAKue-{e&B78uv4*0 z(e){G)^h4ok>a|VGVD|4(F&RRVyZ{iCqZOhq(x$=O^-G zhl^_pm0Y+@Lv-Nxo2)6@7-}JQv9RG6jXYo)r|5d5qA-p{r`14o&Q~N;S%Y&`MTMu1 zCXza6K$W-@t*=@`rC2$1im)(%TA54|O5J5EqgitSgpSlr_*5H(Z_7OjKgXzv;)cwM z#$z;J(#Z0P#!?d!0xlY&HX)iu+jvnb{r&2ySboG!is6b@EB!Ey2I^#I6c_E*A3^Pw z?TYog>hBj!eXjh5JV%i|_&JJeugjUKp1LTplu6!N->T}B)61sUsJSur!Iz=0VJ55` z_<)%ZgK0hs81T==82N7{_aHyAo&E}81Y!2BJTOOBe#@6*L!g0s0G2Obnt$ukn4erN zu)(JEl)VXd!HWoKVtxYjQ}ZaRaaS$J7VE$~C_Vk2f{n8NhwAt>|MKN!^m2*+Fl4~5 ze?7h-4=oF%sr8oCulAMJRMj`EDxLA4=AqF7ro_lY6(&lb{ulK?R6ic&hqgdpPRkn2 z-8zY4S!|I@r+{@_ ztW)CWh^t+ZOCKnhA1RnjVDgamh%B_;5jJh?Ig}f;k9#`AEY4ugR7a#W$r*Vi>s{Hp z$PuynoN`N2UNGkd!Z{-QlN`Yr2_kR~`Pn1}zqQ+Hsh!K(D351CmQ+VDCqc_29r1qM z-EQgawtjh_?e&O%7>kVLDb9?T=g`Vj%NH{9f-`O?k<)$Ua!Zp#PS1KKlwxrq4`*c5 zUNQ2TuOM=u=`iYLmUm8Y$_5|m_()-7f6>0~!>PIQWS=u~0ChZ&L~+&nwkC=4b465F zSEMfXQJFYexbqcdoq`b@}*x?h)oI-wppH{=Fqj4PL)&8kq!r?$5yG34V!3-+N+ z4w+>UZCGSWlm^tM)?XW5b_DGShAA^Tt1Ai+V3tw_=>JUUdW$P^u!!0tMw)#twAU%`MA^?} z8Biypf9oM(%91mF*~$(`RQDad!f=~x9r>6@EoL^>DVJ!Fc^%1V@Xq4o!w7J%Xl<;K0P$m|nnnXgdZ(-beSnNSdUt;sC=lMZzrmQ$`4 zA~_R`0jej}jz#QA{%*mdwt)J<|LYnNp;jT|+B0eLNTCJoU=xj~{S)~@*E_~fMRVJt z9+tcneY7dwG#D;C6qK13k^;H44T3hp4Z4 zeVH&N`wX>+(>;yqn2cKY<{P>`NG?OI*~DLj*enCu@QaX8_^Iedt%XX|{B|)iIx8O~ zh_b1u6#SGg8&UuLMNBF2l`IpeXpkGTe&1;fP#JjAo(T;rT-VJk4DF&3tibg@akj_~J5y@}@DN$N>2{jEz^KV}r^7U4|Q`yc1^4Z{s=8Ry(&D zQit`Lhc}0WOu^RL?Wk<+b{0MnVyRD{fA@E{r&2$}ow0Q8?|yrh;y!IHY3k=xap zrHE9k*6#d5s@Y++zDmvBRbo)h@+&W=SgFD_=A5UUzwcb{9Nu}LmyIxWFx$~E<_FvC zfMA;yFm<&XmWJ)kC&R40LSj>vNM$8QKs8s`-hNAoxlIsFU5De-#iilwW=jA2uqkjd zoY=lNY`*D8I59vJc7?O;?}kn7$fKo9`a~LwS%b=8kC}R{OxXOw6(_>x7UNdamc=6L zi4P0*xYk4GSX>Wyh|?-5D`Ys1=S4glA8ZAOt=S;16%V4s_6wW*Vd-`0EidbN$nOZI zChYDNOeBBM&xyo;)Ze+m@#CswTTvzCI%HQ9_-C&fat`t>Rfwca@Ix9TbRCIH=z2dH z5{f}Sl{kX462#!lm8J5orb@YGZvoO3BArFvl?A#gW7B%}KVH^FNngEqws^ z0n+{k*ynrAai=~?LLaneCiV(u>K%j3MjUPXM0_s)i1_Xq76^#1qYVii30?2SFAHDK z&V0u5?~;xq_5ASlj#c2E0?QfH=S}-6YmZ%TT>vrq_#w`Jrua!ySvM55He|&TkS28Hzm;+E0s5p zoFcjIGs!!ZIpwx9ERvFR%N3xBm1GFf(cBdum)vDGC3O7;G&*8RlS-xB;C16@9;uWk z6;;TaK-bnH5&6Vpj8dDay(7+^{EST$=72seujP9s@J@@Hs56nMb4H=g;Y>&=qe>m& z%A;+ci?8MXLi`P=Q!l;=>Lhn0cA14I&Y2tu;I(DpY{x3;JINJuk3jAAoOJV_r zQBq)WjsGL4^+!{`S{7yo|O|6YvTMPU_hkpB-+|DEvb z)86vN?<8w9T~{<-p_1-Q)bD(Q=IaMq9T&cn{D-i)8D%HW_TKOP+VuyFrKWRilwsQm zj3(2gkxSFM;#yk|HUC<8d2Q=v(IN`sOfS;3ewfQBD37(D z2%Au*IY9gy_gLi8+vnqzaz+#V45+8!UeNcogTIp=LJO^8A*h%OWk&;+{I>E{9$Q0= zEswvy**s)QH_OJNh#$G@su2;W;iB7HMLBBPe<6ky8){akNi|F`6WC!lH)7o@y;V&1#oxj;*q}? zj}7q(c|20?xwYQMu#~;^k3b%yR%Q)&$q#MMr^nIR`C$^gf&cSjpJybe8!? z7PhYzxC+KzAU}RP$X|ko;@ygPCxNd+ygPxztN07#$8QJu7vh_yYOy+d+ODYkQsEJ8Kb6?`bIrCqI5W$dA{q*Xe!mJi^hpbUDNe-m`S){JjF(gL`#Jn8hxGpUa}YCGFtcsQ@Hy_LK6-__ ziBFDjH}Te4?k0Y`$lb*2*CVeH$ma;)8tyiue4-QK{ixfo@sPU;`QW&z;-)k9W!&w8 zyP3y7fV98kZVCNI`BK_*s5_!7ZUFX6?p_M~tK7W~?#bNk2c$lwv^ZMN3b`A?pJk)| zgfBq-KjU~a>TnIO&kVSexO)=ZA9446aL4hqC*fYg-E@8)#|PO6@E^T&Z-N_1l;1Hp zH1{()H;xfU@p-!VUm=wie}OJen$CSe=N_+1E9uRz4QCCInss_a(J$g1w)u&Us0SDxwarjQCE|LxtjYW1Nx+t2L)W-cz!9|n6 z;6Vr`BP5VXas~hO6De4y$ zHQ=ZHC|BC*j%tw9n0-+CII)y{BgXLh*nIo9Z&Z$qwkNiat*d1W8I7mkz}CgoqoZ*L z9trHfp{`I%+4R=u)n_NX-$}mZ%j+A;F=<0ra5I@iE%ubJBBhwB?5L?zZE1;eeKE17 z^u_Bd-Y+CtjXrqHV?*7)GsM2}_pbdOUCM(W_KmfJh`NpA{`W~sC_QC=4+eYzB{VTV0s4L0zA>ezpEO2=+JA^Szvlk7 zedBM)L(2m7_~w1%q4F^E958nxk8j>L9x4wc_490y$2adAQy#-0fBVxz-+kY<=X(@= zN%gKpf9TU;Dvtj8@A*S_7J_(S~~t19?ypNPBT1? z^uv268L$`NHwA95X@visaD$)r3x;=`LM$_nWmaODnh%Fq0__R=53TWG1Wmy{gROQh zxlK{GVam2P$4UnLv6VlQtyd;g{VZY~u{m69rFVWdg?0c^+OU_C$|9SS43W(fus>zN z{!}Wxsn9+Q(W0@HWlle{(Px;tt!@5FHgT)-aNBWjXLx3_q04C)DI9LQEi71n7q+!8 zs~p~C7IK7!)54WXNmR05lXD)LFXH7laR)PIG+5^UZ zUlywZRk6oHd*2T1(Kv!L6ArhPVz+r-@VX~Uu%lOiUDd;FBKG@;^0aenXg%82igvwS zqPEL%(OFNFc3k|MyKlShP}+4L+I275rR^^@wQlfzCQ{3Y3)oihk*)Ky5&6!2!+TBf z5A?A4>v~w>yPvTag@CZl@Tf4g{lXT1=V!xS%n#a^J+#sl%$a{CZ1c0sGvP@kr@=3$ z!;=DYI!xWoD~I=vH?WEE-OU>(bvJiS?ruIV^qS*^Yd-yA#CoAOF&=PN@`O*ncx2bJ zz1DaO_~?@_9$9bChJGQbwcDNfWkmQ(AY$F^mJLm<-6fgT@|QabBCSp07mw^Nkqsvn zL|(z3{jQ`&@b{P;_6zF$SDo*l$qf_)M{Y#v#sxv^ah5IyN3HC^p5?;e$gUpjC?=zv z5d}gH%9p4{s6heM$DVDH{aNryzeIhoe|}?YcWGfDGOF^+i1C+|@ zDqWFRuw!g&q8gddYiqG{Ip!L*7O$Wd!+ULl_lrj??k^t69Nudc01FeJ5Xu3iF@>c%B>FC+$Zw?o?Crn_yvxn1eP(sJ=!Yr^%dbo$V-U~Cw z+8&noUf5(e27ZSeg2JIoV*;}zy?4jD2xhm5l_D}9ygR+4^cGiXIU zXX-K-q4I&1V=5O{Qr{96$04pwPERuS+Kp+lZ35A| zk;{|goinfl^|n$LOGR#(l=1I~0lf3sH@k#*+y zN=p?2w3I?XFLh*K&mr16WTbt&wh;~lCu{n6LTXuCuqMt7uZ7V zjhf^=Ng2?EVH|EB*=^1IQ>P)I=0nn$O&Q4|E$c*LIs`l1!+bOQ}_tA#II^<_ad&&J{{(=Q;p$0XIlAcN~}g z+qnZgX{R)lnnC8;u@jmzRh@63UrHj4jz45b^@og#K7`uKyeQiZZ3EJd+qc#`#-31O z2;_NF0GVV(ZCINc#(KvXQ|yKS>rF9^u`_9$Pk-juntCub7bRoft| z0#z&%G&f+TOkW58TB*@%6Ca<8F!TVhR{>kxdZ@ALci)=!ogveX_I_KrMsKuSY?|oH zUE=*PoYGADcvNp%gA7&oj?dyAvSG)soocVkg;oTu*o$nJft{FFwziDq$J+9|^7e3% zy*)h7p6h-{I_z$AZggcW2!57-TcXzr%2P90WIHy;PMACmXIHNMf!(iLMq}HT0xN3lQgrF zAnnuTU5IN$Ttn)+p$eft&6|Q;ADYT_a z$HL53Dj7=bGhTH5<4mC!yXnafdmqc+bLMDxX35+OpNu&go?(0c!t#crQiAtr*kL~! zp3R;JC0U*dB|-aPO6})vn>vaLJr%>@@P(EOJRaA6;j}L4Vb?w>QHy zsb_@gdC~NR+_)}eKHd?Y(fm4Oa{Gnf`%RU(!I9%Su+q*8S{1q69I_UsRf6|g&VmS(EGuamR`YfEFau#dKQ{G54d>_q}%Lqy|*ri zY@M($vh7Bi{mSGWH|7Sj$K^)0-H{i0^~Su&qxa_ruUVEC+4{6ce&LQ>!2HOs@5qn* z{Eh^lhpc zJ&HBwq%|vr8C0tiDev8Czvj`EJ_DWcL6je&jh}HLa$e5WI8JU$Au{Kpe zHx63~tdnO_E38-#Lyy;*MQD%ZPQ=L&z%^^SV{ou})dhH2gLza8ThRnB9OU1}{vc`sn zZzzgfR%C)6&D6Xll#2CsdKNgPxG?gaz0k)W8ykv0I5s3~CmRG>9nl+!7)kMs4GpU- zii~aA8cID)VWRB!!GFRT*$Ta=N@wCaXJnf~car#I{~{txjBJCH-0G7cMNvBR%)6S% z>V>$H)>f|Itof3>8+zxIy#}PBtljiVqnP7I%JZ$Z*gV`9)S%xAS~a zWK_|7ggfPjuTGbr`%{%XyvT)m$A=83w?NLg&?ce@wP#)=$49aTYrhloA~O_zg8S+9 zD0eQx3L-O_Ftcoj{PArG#cc;okBN~dpda4!bYm!W`&Q%!Iuuhr#J|qSqgj-nS(l$H z@>mi4PlHE~5r2VSkuDBT>M^8)88$%=RMLX^lBvC?}i{?fy$9Q`zi|huBzo6XkKIcOV?x=z^#tuX! zb_H%n3-FAn%ts62<@Ar%f?MxWM#qNy$i?ShGVPi4MW_+7<=8figkSZhkZe)jjqJAB zH`=_m$&>MKwk^67shl&w+3yT@UFj5dHQ9RCUtQ+0INnicg|m(`Tj)aR6E-IH}q zU3nI65NlYSRpl+M&#JF0Lm>9yy`@)sYwEMyb-ug5ceQ31d$kfA+wEkEX|JYkT`GBO z^|hWdZ-rM?u+nW}HpQOb=B;6u%=g0t_B!pm zl@DY4N`SjHfxSR}{C1Fk7M={mgTC$c_kn*4@hrf74P7nyDIWPr2TbuuZ$~f@x=G6C zmEo#x5_+U)zNDMH2ptx5Qoaj-Qvd^T?DfB45Allxw(lHpXXDrl~kySrCQlO8~j#XdE`&z5xIHh^om+YEOnci#hdFL$qlTj1^% z#NCMqf0(!vJwW(Yz%1^56L2w)a}UPOhaCT$iLtwQK8eWF z$=xQnsZNwn0o;G!Za>^IPx}>kJf7n>p$>2=@d22Pm-Q9uU;8{}HN|LQ_OO$O_-1S)nkm=~j*%z*k;Ia?f6$-2q5rEf|_+ohcS zi=}i8yn_+?!Xd74#95J{1OMaO0tZ~0hz8(@%^K-0Ym}KKfjo%+hId2c83hNMi+%zs#n}kq%9m0Hyz30em^) z5rkM%9*8mJ_n+u;=D!~aU3OX=y?h_w12#Is-Xf15t{8}iVy_*Q-HP7P<=FwDut0Qb`NNXWgwe`&i4a?h68l5 zS|9f#H)4MKkM=?1M8TGr7P<7LY)WHUCfMjFiO_PUtvi>-GO*{=Ew_}|MAhCC`=!&& zZOw;TB;~{n-UylQEQ+G}DlFGz`V$lEo8@cxlc|^1PHanJ~^3Z7U zpUAzT@<1j0T1CFij%BDk^xgMu=O6zHn$p+_fToo06bubX2I_y`W(#8lKR|r4MD(e? zY;8`Yy!y*uy!R>c*ltthFr_1Tya4`d09(@`4>Hi>re-Oq;SlYPFn-@K;PgnB2J zkZvnYy2rJ~Y3qF6`_FwP-pHk9*)N*XB9}IyCE0>n8hfn7yV^zC4Zmy?r{MfeN|??e zIpO+lxW#QpNJI35CTnvbpOtMm2LWBASu)wp&|16xb6v z=Phvu-Ril3tj}1|-d;!F{oc3NwZ_5rBEAzkxZy!Bo0i*A;=Mh9vsj&p($53X)3hXr zhDQyVr^6=LRhWxUhZFs$!`9aJ3y=DXuef}|X3@Cy=CEn%f}s6)elTa5FtZ?d-Nq%- z{NU_29+OT=qoA{zb%Pk30e$>T=Rwj*qtYU&b43D?K>3h|dZ z=Uxod+FaO$9)8YEXQXguCvXNfFlWMv_A_B?$->~wF6^DM1;N?JPoWj0{W}#-w249c z%2Q#hmChTfd+W4+pEC~oj#p!!b_6VouADCKxoI8ty4Qsav(~{506XNCBhXeJ38(m> zwR9W_k8eE=NIUE{F}i>FwtnxBsI)*79?cJ?Ec3AW!PGZ0zz++8YZGBRcJ z)6?a|Lu4DXzx%y|bS7uaN5ZtpXN=q9C%CULlTMiFACSAFYIiJ7&gsDZ`iLX zxzIT}AWR!MXiRf7rd5gQxX?9v3URy9l>TE^9O&xoj_X>-tRdkvG*@2||IF-OBqwDF z)98F;?HL2v`uu|Gv_qs?k&86@@3zH@ew+j&obbf_p#6=4V9v%CQ4C(U@)S;|eH2b? zB^?>FC3N`(3+{G#O!_}*4ESLt_+b__J#&`1g0tsm$eTuF%FlrpHY`e(pRK8s*T1{~ zd+6A^eq^EiuuS{z6*4<9Nj4-^V?Q`Ca&Uq<(wu~IV9L2-(;2~T%68qz5e`ghVAf~g<@;IwbSr4njz z>Dw^!sP*2j6S~$5J8@#GQSrOK4to7!BF1s5jxTqHG`@T`^q=!3crXC|gC;D|4!%?P z61}PLC5rb3yv@jd> z;sIqPsOg5*w64V&$qnKg(D9l(=p@|CeV=;Sbk@`Auk{`c+#?toryLT=ECbJe46D3#fb z`Ot`pa^`YD{^gB0M}DPKw%r7c>4b7Q<0cPq)$$%_P4`WJ=3I%3coX(_zmrO>|6Zp_ zj>oB6LlWs5UC`W4k~50P>Zl4_M;hHpa^?gZP7tTdEm=4rtfZpT?R2tz&39A^Drekf zVL}G1=d_dWbedQ_{jSAn{4P!--l&}rEkDh+mxwom_i`i0VgFF3@!3_8OLf6`v80kt zr&b65?2XsSzxb|v$iKK=Ax@Qlc18XL-0u#Qf5jyKbbRK}_>AnZG(K|$=RiIWF8^Rb zkqOI)S+I~ueGu~RUC6(8!zsjPCGV>8uY~yQh5*}MptR)d*T=&ttUWvi`g*Ki!lq{Q zxsCXqYziTtOXdY{RYTt@QErL?i9(EV=!sF5w+Qf+H6E^Hlj9E zvRxFo)}PMjnM9g(Pj;15vW&zI$HkqBB_de}L@pfzR(*dv@&>c1uC_Ncn^eceo61N! zHl2%SKXy61mEz@~eQOulZmMw{-UOUTOa=D2E}C@(ynoR={1E2>^~S~DE`S88B~gm;AWdC0L@mt$hv1}{r@ zT>O46auI}Wt6hdI#?8VDrsfQ!`{BO=(oCed^JWS)NUL3V6YOZgdFhtY;W$aSrc%gW zqqw*{h-(xR#M9w1Ol|vQ@KZ{&Up$&Wy5m%MjD3Fo$d22*+r3U$FrW6W_df2tyyK|% zba=cy&wUI$ea!ux081-?^-hX47ja;rZ2e<+jIGd(IJWoTLagSQ0r=Rhl)}EjeY1PL z_n6lueF&-fA*AN-CDO@`@)9>cAkkd@4s2m&tYluYj-mO4Y%s_csQ>)E1{|{n9J2-- zvj!Y9&r3YRrhL#jPdtViIl!~5$MtV29dkNE`F_=!0PC)cqq7;=5aUcL>$&p)(PKUO zIstvH(xT;joXE1~b!3QX$YuCf;EImP;w|CCD_;kNzp}@AF%!M$c-4enG`$$NIUc<@ zOzFkHe>ovwg8iqyFOTFP9p?_MFCR*ydNA~*u*I<1D;kx)y!%VL(wAEl8^peSX@-p&yCgn`67JvP|pQ9IJX;K3B4M<}Qt7)|PY%g@VQQMyl zSjD}#zO_-@Dy|1tGb{LE&Am9yYi&>4=MV#P9YJftHJ=>7I@bCISsKzT299U2kIc%K z9+ZwqYq|}of;T@nYMC~p8ajU~-;`twU?##{5u1}-!BO-7EyY5g2{jcep}4nWa}mv1 zv|>(|8}C2~H;KWqD=`;WuI-MS#pHF%X|Axz>lSIbR$ykz!;Kla!Lhh!<=*WSm*Py3 zFTZO%thfzX#z@ZnHu+~Y`@4UmgnZn_dZoWaX*1BYuj!j(E^%Bi{I z+dOEQ0k#jI#nsx`e`?vfn=o@*sAZ$irpd-D(K2O5PJ|_^L9q_iR)}h=VBh-k{_bPj zDaE+c`@4@SuH@5ncKvmUZ5DQaAx#t;&y})V5tnjY`pefDGJ6E^c2kP!r%5)9!;J!} ze}t0mfW(@G-C-r2o0&y5<-1x+rG$}4nZkxDrIq525CRl#hV6m80d@y3>far(_3+ae z58Glq+(=RgW58b`O%TV5!!{QLQ#KOcqK*n(Za9lm;H_ft@|8QJ{9x*`KT9_6{NT7Z zz~wE@pmi#GOR3>^&(a!dfA?`E)yHjW9_>oIFF%_m32(G`b3~klA3jxFO=s3yjGKo& z5xKNK@>g$}v_twc?wqmSU;}rk<#v3ew4_nr3iF;}kCVj~OFtNU`uHw+S9!JSs z)>Hku_AYA*?DEq4-la&$n}PS*ONv}QbgtFGdV~Y9_icLb#SUxwF7I(EZ=d7BHZNr3 z@GGP*TnjP3q>3z)Zb*8la=r74&JxMC53^h* z@x5aZ-u?H!_EoS$yK%i3FTNx8NL$2u>G#;(&Gr&~@g8!uGdPm^AeH#baTaT$VyuU7 z-$bHff9ME~L{F;kIN3@M^uI{7+Eer4JsUme5eG>-M#Pz;mQS!=`9G{0u?D*E zu`@Qyk^`-OO0qGpl?NsI~b*_V5s*r-c>q+Tq z>bV!s)=sRnyIw6m+;!MEJ}16wtx?E+<)3WPKRZVRv``^!Qu<&qY^BT=-_5 zr$Y$`o99lIhvN>eWwWq5QS@|ZSnAWEcuQ_%G^F+DtaRLA96zkUI0D z(C|!?+_D^JG#16n&)$T$C$z+p`cWt$wWm9OR!_GJ_Xs(Xgg`kg!{_74&mTkUN84`a zsE!XmixX&V*y(*qT&>OLqt#2H#mdUj zuEt#BE^x2$zU?idm18?rj?E__|7I;4CwihEB(EVgKbM;l6O)E;Tw6 zI-ZhJr8^`x?RQu)jqIq9UUDXN{JA7CaJ%<+c)LC;vCIkH(H*w{KceGgNpc{)Bz+(G zj2%nehCtBG0^3TCNp-KY^ihE^C6o414#tjBgq=s&vj}6Erj9Yv0-P-@6|wG1XPIW) z!ZN1vsglv9^&*>ku#@&bt=MTDe16*0nvDISI?1r>Ht^Z!-adOMSAC6>F($DVdwXAB zVxbHD_V)U|+uB^uiaqYau<4DYUYog2x=nN-#~d&5?QKKy?Unx@@T~-%#Tv=RY=v+g z3B^qfxNYJfeW~;#PGnAG(&eIcE@MSdL|g@B)&qbq;5m%vX(-vAhB9q09xpc4VY|kr z&;!cUhFW`;~;3i$hULZeyJIMe0F>1KU!1kSm(a?uu zV&UX}7Y~Z}9OQ7uC^i006Wcdy6z&cg6^l>)3_Mi+6@XO!S0mNa!S^}b z!r@}jjqq1+_QZq9@E7q|0X=p zkNDOh9@VK1bl3o#AMv=-V+Z*Qcs^T@&qDZJx_rn#8xNJ2iFj|K-`3+!5<75{5s&=T zpX49Q^ErZi#=}2Kmk;@2KdI#NG48;jc726-e+BL|>?*Z(lK&Ww_ac5NopG7(< z5Bcuf3EWdirT*J_fypC_rSf6_~a*glYc*+OvL*I;1s}z5&snEItTWdj{&y< z@ySo|$^R2PlMt_g!%9Ht(|n~!N4mG2NLK;eok&N1N=N>sc%~v=$1t^i>3}rOQUGb3 z#dG{YDDMd03P||vfYhE19D@H8|0W~uT|xN0fH{D*M)rC+lyT=FC+-HW(#T#QKb22@ zvSXcycx3ablnY4y$;dnda4aC@mkdbdnK=9k84z81pdy|IoE>)tVX?=~L!6Nxza8ZN z6c6S1F(BplKH^jVCXZ$NJ_PP4;%og){ylgmBVG$2>>GWLA$|eeyKr~WQ-IBgPky>v ziTs=Jpln|w&-Yg3yB@gvborA19z0Z!AM$uVLA+AnZq>yj|7<)|KJrw`hg&H>1?>ah zFdHu)PUSA4@o-T2Xp+*dcabkttRw=W?IJ(AM=3u85acmU;?Tw+ zCUR)zkn*GW016xrc}RB{w1-ID+}b2stN)7-rY?mgVS0F^t$-DFdHoV#h9oZ{|Xz=Ic+I<&+6rRGMx&EP$% zTL&8b9quMsF`2uk0dME-r!eLn+-*gi1sWc5>JILfAQ$Vodk^p%xI2LP=`rr6j@rrH zCb(ba?l986&D}Q8wu8Gf&=H?<_YdLz7k8gk=eMXm3-u$}wxEejvx}*M`(BQJ6L2Ya zg9nu<1Ef%Xf5U&xeNyKx(7E^N+?#anr*!TMI`?mMZULEV`OnhfN9phrb#9D-X#5v- z?zePqvWrozSaP{lP1L$ZMQc`!xB+OuUE|!4kzXLMT+hzkYFZdMYM+zUKJTao^ogba zHZ{*NZ_w}X4Pp#*7rsfOnEh%tm3n(2G9l_?`=iOO3Z&ajG4sg~oExh*RvwC*Sjsm-1~OwM_nv34LVcSWEO~|31+cl~&@* zb8I=4t{KV3+&`#u`b($#m zYDsSeHqibR;#R%;-lmSpq3mC;#{|*<*+dYcUwPsI>Gz-5zupTON$K&&S|PuiDdB%% z2S(}X*NyV^KZsSo=KnVP*Kf!}%i>$@Ux&(r|hsrFZUd#$lO<_+s`gXxbi!?}ODlRnOIA!~|>tVf2MdaI20yS{Ldz90{` zh%no_b2fvi*A^F8aU|?#N5bpakHGVZNvW6Htb_*w?>qe(|s2$<>|O%8@nxz zK)Fqv=vf!K3^|NVC0ibO!>@YHI0Fd%5VkdQFI;XDXkQ2S3C*1di2H>LfqedfUWi;kbdCV^4r;oYl^M~r_mZE96r6^Oz zeHPFOJQJD37S#!9-+=N;T2 zvl;t(%pyiM`&b&?2b33_eS=HhRfJpMvkGyizyjPYqulBpX~s?DJ8^n-7jD-`z+RXo z6DNLW;q)&~MO$&&Jr28p_9SOyGo5h7jpQRNxn)9`01B&jK2e=%pQtZ?!DbG1`eo&( zl~+}lRMUMZWRrCg_blZHXDlnNr283QA(G@medy#bSt!sA|8&zolXo^5`+_7Ni_Z+P6j)VPPZ7WF2Y*77^092fWTyO&;Y59G?x0msERqcQ)?WB%0Lm)D3ZiPtXT?wZd-DzA~= zRc!~=(j;p2v?`-75K?Ow8+(0gw;@{Qlf2A?0ku>4`%RR25M>gdm~cNkMt{gI?kt1- zWk~I_-66HlhNV(}QQx^MsgKet(QC@RI3A_vsQ*Y;I&&QL7;*Mho=WhLgkCeqJCkg< z>nYlMpkmJ-^9BnoLb^a-2I=BQp>?dSPQ zKW`vyXeP-kq0=zg9H8E2lQkS{Q77M$U*3`1ae zO9``;xC14D(w5Rd+3*0#vPf=A$tNW?>^i#Ltmmol->O-bqeH4@8M&Q?>EmHR61kKT zio^XpalJDH${lxTW8c;={lhTxD>@d*kssedIyO_t0h@&g_Fv3 zUPC^*p^mlT+YNo>p{dOPJjq06(@|ZCtH~nR#Ky(sQ5@Y0vH_a_J)iiW39Yg`svE7W z=MVlzb@G+<{I8$crimGDKW4yPC9ZJF2%P-zoealLXmIQzwa zNCm+;8|~6vxSb?t>SXAB?KhO;>n1axeVRFrEI-LY2lGZ!A#SIjTPkoDjn5(PNy1$s zQF;9UWc34(*)OfsByxL~Ns-8Jc0Gy_O(Pt4aHJ~MgOJEoibUR}jBAYbVUWj7ki{gE zvmOYIwoLOd*a@aXDnEdk`vJ_{)HY2Tk5NzXE8jGres8a?ox9Oj=+o}P;<^hR9}pLq z#4XTQ!v3zy=A)K>QbjHQ3v{>kgo-NC6g^)>md($4qpgJ{64@%!3`H%c7Hh4iS&C*W znx$yA+8J%R6SiSA7tQG+S*Dk5{pX_oEr(pQTorA(Cd>M_nkdn8$d5a>=nkySp^=u& zp;6FiF$-z7D3r#Ip@y{Oot_OIVFm6;vw&MIB)N`aq^*3bc5dfqV<)zQ&l&79Mp_cv z3@f&KD8=tQheKl%^s5kBcl23@bo9?J5BX6)&{#LY*1x4D4LW2)xMfANB4>rp5KItexAAhsvk3SdmLh z&j-tJ>Z?kRD?C4~y!BAKuXgTXk9r>(-GxT9=nO9i(0EGp(b(z?yPC<)tutKEPMXR> z-$S_7gVtiLNpy>2Zg9@HdBIs&56uR*y@D^gyrhh|0(p;*VQ#~Sr?0|LFDs*=S()D` zSJHG+u2f#4k946$KC<3_$VcVTn4^^!Nf0w63GNsS6+{k_)pZhmWrDu*Bgro{(TrLy z`-`-%z({gq6WPp~QSKzU@6DI$`2)329*3n$5@_@8XEuzMoMrBnwBA#{k2GT(bjL}k z`GkVtjE(C;Ntg>0Qv+4$zE8Zr^iiA=&}PfO7@??w}wEY zgSbh=I?fIJtb}s;rJ}+}a|l#Xu;r*B{Cl_Ido~Mk2TZxV8xrajw6ZnHfz_S5rn6e8 zPt}nV)7_KJ9NSt_HC7awlf)LEvAM)&Xts$b!v(D;!wXtYhKv1?OSgZ<9;X(OEj-n; zFgWu?H`+HVL3o_*yD@H`ADr<9dh!JB3sTlHhQ|vc%}plI+5oF|2Owzbqc1*DD%(n@ zB0Z;PQBN1(J{oE-^^QZHcESQ`CxhBFKj5oOMHoyC3RRb*+5+p#5i9U21UpjD(R-CDp+mPy*`fMs02DQ zP!OEGk?!5ejm!>JqVAwKR({hbxFT=jjvZRNC*UlH1#7i9JR?#apgz4VtixNxxAp(} zLHhqHU*ysc&#Ap%7@YAUwT`R~+)9gu$1zWw0PR8~0J&I zNRdVxs|u@1S@^iSMbA*MgG-z(!h@1LmOg*N&tKyxn31b8AeFuHG=PnC9jTshS zhC_ZN(TJ8*{$v?noq`0>%f8yVWFLGCH*PLPc{xfguA906vXAQEg0+M@jWaGB6azStwtgdE13EnHBIxm1Up*j~J9o2(kQ?1cYSyUe< z-kS%L$B_S(jg@p4nYI_9eWQy-tl-m@37CTwOD~i1UQb`06OMQ?j-)!pIxJP`w-8&Z$0j#9b;&9+VRdH zV5S`-IYl*9FHgnSOG&s9Ol+vxAfDWJ^0Q$A){O?-8QI$E#6Ak6S$dLTpOfAo1lu~? zC27ZdhEwdA3wP@@SWEx4Q?-&xtEW!}WX+*3nR?3q-@ZSIF0!9qhC7aM2~rIuxnF$Cq$z_3jE!)oOg&hCXVE^+Xx;81#`F{_O(#j1t7|$c@fZ!6AU?z(MZZqd9vc3aIVt%~&?r39M~ngY6>X{EQ?<3l6Ls5-d)fn3N8H)l*| z_UZNtx}r*ni(9G`INLUFp*U~hyrs7>`VPI#x2j&b&IxsdBH?b24WBBvRd}m$J=ApO zQ@;6Nn{%U$@?z>IA*k4S)gCAw+yhd>ECBj@=*pl|^8FBY7z7J&fSX_~bY%odCr5B8 zhdCU^a|n9{CHyr&>|=VibLi)=lEYLDj}6Wnkss_2*!KWoC!nN%5F5ONC%ru3uK=WS zTd@f~8?XhC@_(GeX29!!zXuTeroINi8vsk=+3OEs?{*yQ1S)~MGoHObe*AWj|8|7` z3I0_GuYms+gp;4b$-fxkwD+5ga0&he2blP=Et-uG$o95BVz* zei`=cpTxaTcf((SaPm`o$X|-^c=$IU{2uuKAKKmrE~+a1AHOpUh$A2>D)L7ML?Z-6 zBs0?*5C_9Qk-2GQD+ttp{0p^p`&m08nVHmxe?Iv4gRT{(w&=Qj)GVp2buC-iZOb(K zP+P4j!ypyj+G@V<_qq2D7m%!e`?)WMbDs0(InViX&pqck&v~Bth$qZ=!jtf0xr5-c z-2QM`uB4XxJCy5(ux}xUptU36cE~AwIso_2f%gX=NoqqpVd5p+g7_1Fk0IWK^cN6M znDK<)MLhBC0saq>zCnkd@Y{&5MEV2Be+Dpg`tKpk{De;+J{#~##GeKH3gQVfp70L* zSg)_Zgl9WLpO5=d*BG&kfLXMLI4)&(#)$LHCuno`lyRp6&U&{vCR>wD#5X zXt6yD5MPb-us!5$U%~|{{(=2qTM2Nk4nN^6#IxO&A-^5)e8g+*NO&IN*>1BDUkrFQ z;j#zXhVLUqt#~>cEZqy@o0OOxFp7s#Nvy(7}fOs$J5JtHN z>VBacfe5f$9%M_%1bX6XwDLs{d2?X~&9qT2YFQ^QYyhE_Ga6ya&AzZvCzrPUqmfB`D~P4Ev=+X^V9=_;PXz>}n=S%Nxd zs(Bs2xlc`R!hH5Ws^0=XZu$$FS0k^i`j?>G&s4t!e#$(sUQXaXq|!D6IOA0R+eq`U z>W@MAay9)tl>ekw7V1 zY#h6!jbk}l^>f_js%bt&ntX&KNIV!SUVo|1|E-O7R1fa8S}~LLMLr-s#$+M~enJE~7LsB`0TT(b7Ut!$NFjB}IA# zV^9*)UAK#(55`-VV%$cd-X^Nc62luv04`V0H=Dd?m#i;*{K6uf;4wkdhV&dao6_1=hXYC?V*FyQs$(1L1`NL5?vvs;UDuIyRN%j z%(e6<6#|C|dF?6=4Lg=4-e&}SY?rR`JEmBnH_a=*6AU;MsS>XjdT=H5tyg}B`S~;8 zhb592gK)0;1ON}yb$!T_dA!aKcQmn@7=GApTJN*ocfFr8*xm>C6C>@9rJ6p7$BlKV z%COF-$pl-%u{e22ZIk+$E~WWWQXm%Au!>-r%wi3O#)CLpO}g*p04Wc5T(TgsgZpq2 zC3j$T$V{umJg-<~d&2f>x$xGz<-)&Gr#kt2(BqLv`&>J~`&m9(klksvufX3qrYQU-Fuoc46J)|*U*#+9b!=MdZ zoLrfk7z^p1IS$^)8U8lzI=&4GU||WTT#=AZi8Qx-)7Srqr~F3f(({2mDe0fzJni4w zk`)Hq@Nr*!(>JuW#TwVzGG$`ZH&2K1{+ZP?J3+c+l?<2ADN$DUCxNK9`PGG)`G&;I zY^SONqP#ApJw}ykNNImUNHwIi$356t=EB+1C1hjZsKIIYX7Xz|U+bw`gu*dH=H$q5;dh%mwe0l3_eXrnD?gDo3fBf?-qiamof zRe$g+56<-W9FAl!`GJ?I-41oM?QyVo{4o-=-s!LJok;XfV852&402w(cc+L`S-3kWScKn^wpP})Ce6x zxZlc>2cYEFMOv23USr9-S@J}+ z9Z5IeCC3MFei>fHK1}me&6NHf^etokZw#fBEt0J7{CRpi9 zJuR2k1lh`M*|wooD*;DVotBr^{YqYY`y%@$DBCkq*>NF4@~xe1b6k)H46QafBddL!gR70sh-!m#NVVh)tq$89zEx_ye6=Cc+_CTnvI|>3ttQiz9twG;;c&gvNzuC z^K!j&zPx-GwG*&5(B~my#XF9Ma9V6~7q zlbTQPzI)$sN(ks?7wY3uXSb7%u~^4cK)XW!QCi7k8#6Ggjg3<@F1#vIin+z2&Mk@C zU8BQzmdM$XD;dgw;+uo-EM;1IELT_awGN)XotD=+V>V1{PJEJID7<4s@P7R^n(x;b zS}02zg|}-4-vOQ$;_IDY`giYEe!(0Udz(-TGv~-&;@yg>GTSWchiw?@?A=7`eU_?) zwzW2l{V7rFhdGCCptY4XfH-r8uZwX0?F-4Uns1$RL~WSRD|EwmBdUiuM^=YAud5#H zOxkv1b@bNLkW~m-AG~*jKvG!P^|`JT1r6pO!66z3^uE;SKS1M&Yfo;H?=}UFkBeF*w8U)(qX! z=Pk+uNUeYRc9M`)RnGf5twbmrr?!+5*?BA=<0&JBLwbYMw=-;EO zhdakqM>`X%qnu-_EzS|u!_Xo_(IOGf*y=E6Qgx(rTy?lJ87*}KT55dtO^2bcl%Q+NnH4JSv7;P1bwi<#NCLA+NB-(0tb@b+_Ef&l%!@iy3ont6R z)c8f%R73nQtZ8lyygriegA~mfS{mLDay`)K7Z*HM8Kp^FtwEQa@*ZMl>3b47Pz>X? zrGC*U;qHDvgYPBdfc$y)+8xkUT@G#3+8SdIZs|iZ)H&8p+rgm?ee5{F4eIZ_{o;@; z*!!$M1_@HB^*IOiQ(IdPI6|tVSgG}>!*F@EkKuBK@8PDv0%(eSdTl{}XDRe7BtolW z()30-zKQ4ajTkKru+F-&U{>?^OAT_2laev@I911*4LZD%-U_L*iL>)$adxg)ciN4$ z{^3B%Ka8y9J_2u621DSk!Mr~ua6M0@G1jL)X#d(iy!Ia3aKIz0@39SZ4!2!bJqSJ9 z7wy{5xn15MjkW*D9^@Q}SbrvyNR%xBX6tRuw``S+&^DHEgAsZ{CkO3_2DOfZ zkV1&ufAG9Kt;TlIH^4Gw*nZ2tO0487UBf2wt+>*}o(-w0NIiLcmF@P6LBVnJd@ltB zTkV6KAx&suixf>Os)L+?js7Lj&PG^uK8$_}X_R7zHuzj#ZT7ibVTy!(*08<7o64sKtv?CvDi*`NvXs^5k|}tq zePC1YCR|${8MK}@p@SNOs->7Wi+xLaH~Cz4Aop@p@TQS=$YQUDmaNP{kYP%Kgk$ok z0UIgp*>4m3DD7gb#3&HCaOFtEx9$&o@xs+Beor$6g24Xj!|7J6yx4^nG-(}Hhd z+cc&xs5ins?Vzo!eehL!xEy7gY=gF148fb(-X@mm z96;Q#yvq6qiu%7++#r{twVB`HyL@~S>W}tyQc5oEqS?Y(JZk@}=HyGQHr}K7+=kjG zMDIi0Cv!ZVmnUIvm{wEiibjt|i5?$qH;jm}2VjN>X*vyg#9o+7EzaH>2JaiV#k{GH za{%Vp;QC6)USbXnGeE8kT4C#y8PxP`$mXHd{#lTGl(-u=!=?Td?#QWy;(G6#p}y0- zyW2UOoWFe0`|>>8su+a#v;TCX+b{CA=HRW`{!aQbWX1cCVB`AweR&Qvw?7D>KO;Chhx9b zbN}JKQSN78r|p@SA8YYnGu=}S+>aff>D~(+Vx!JSw^;A#1F5EH?EGhX4t#HR`|dZp z$87KA-m`zY=kWHKojbA^C^Ct!#|v` z2;cR7AAI3E72oy;Gp0&b;HT+;K6KSbg?!vptR`%b)HAy)CY#*5AcMK@K0l1eJhzEF z0<2%w30Wi~-cfCZ5%J-&0@R}aH+IyajCIMJatG^S#CM|qG;6~`*hkKwePq}_z6bV? zCwA0BZ+lVQwf0uz{uCY4-T50n>!vh^Lh95Gy<=gc-YGW0@~5G1xcIImMq>Vng8tz! z+8?lxYM`k%pGW43)EZM^np3y#cU`xQ)? zW?gx~;1k;P9#U4r_A+xCwi>I48dlvcRa@;92-EWX3OVkXGSm7DZgYH|wc?^t%F2d~ zOY;fXHrI0oI&9Es-|X&sybsm&x*QWQWL=oE*JXe6whO7j*7g~hTw5(mdtXkhn_M8- zzk`0m5T|4x=iCBqR`1IbnqIj)43oWr@ie-yFb-#Wa zzRi>CFB+_~AOVW8FR1E!9(3Ohj)z!lTfaQJ0(5&}N88_4U^f~UwiP?(uqIEk`CCu) z@P+PH1MWGRxemW4dr0<5m*2!Q+1B<8$!KHK@-)uWO&@18583;oZANqGTd(Bb)*P|* zkww(?J-8~)9dJH$z1`ira+QdoSf8LND@dK)+sumgp$@PeQV<(iPIj-#WlKuo0u6?<`LuM$IlEmzn0-hB;>o z=C94*O;%%m+C@3Y?~izP{ZBYnaYJ?tLmLmR<=PDExGA;iM?6no;c70tc8ZO0wdq5* z4BHxx{Ya@paC`7=u~dt_p}ZuM^0VjVtU9hcBqLWH=jHh|j)PM#;#=sVZ0GZ_qp-rxW(s&E4E7N=~Fa!$yPb}q{w?mV1daUoE;Zr{+oa=uS=#RX%^SbVc<(M$WB@y-ba z3C?8&qn(Ef#yI7IMCXJ>W1Y(uB{>ZiiTk70ZQoei_YK6@@qHvM!Jc4`x4qsp%`+@; zx+e_QF^A2Z?uh{3a~Qs$;rmljM;myaX1o!Y6{*p)fb?6xJnFExdly;T?->|{5k_p1 zyZ0lHq#2+|{_rC39}5!f(7ATj0G{}ihru~GN;u^dxRYC2TQb7pZ8py!SU-)#*LD!f zj!bBU9!iXl$@oTf~x%Ib59?<1!JHSw8go17WfC-T_MwX zc40xxvI217@zyw;i@W)iWf4cPP?4!QefFR%W2z zDOU`+=Ssg8=Sw4zb3(!A$YF->aDfA-9&zwVmW%FJ_fQfWwpRCJ#>1?la9qyd9UZXQ z+GbtKvEe`Ek+dWE%N8ZrIU{n+jctf&v6{m+E3@24G0V|rJ6Z@o(?qmT*vV|pZA<9)TO6LN8-PUK_wM{NFB@8QLJFRi5Bs=(jP_2v{ZXV}JF*YFdgJm;X>c_Y>sGU{_F2 zE#y0G5sBRM^}cK{&1g=3Yq1UYMNZ#ui)A0-tLTpwpXE8`^7Dig&A_b*lP6@RpL;ac zVDU3owwNaRK>NIpr{7HNYZ&G3H&%QNCoXiaJUzu7?cxmvd{f0rZx$rnfpsSDa^Ovw z$-94i6Y+%*U#;QT(;tS7s@rV4Quj0(n^-ex#2c61@V7_wv!%<+=fiG+DP3L?|HBpe zi)?%SrFtn{c1G+(TU11RjQ<-VXo+EXeg^#2@oT{Ajkq~oULAkRet&+tyl>KU{NEOD zYYvB|-zm*Q5my&K+TEuzT|PXC>o(X`u*AE~f$4H>{JpY83dJm)E*~nyTstvc-W{+S z+8U|F(myL*b_6_!8~?k3aoMqSxn@QkbV&vULhEEOzJ=SNB{A!{%XZLrY#(yR4FQI_ z^ttl9V{_%)wR7e9ljh3yeVR>)x$>L<&hvxitO)KfGMW?jN=6Ije8<6*i;~~7sl8kg z=3cIFanmW{_*|5}Ds^H5Fq`oW2uqji1JdOa5#@E#x(M9fnJe!Lm@6NOn2Y+&Mcsb5 zlJ&)Ko3YOSkB9A%u|q$cD=&$Nh~{W9UUEqLFG)tUUHnGq2KM)#E1y8#WyfBF7F_O0 zU&F2^ID0Ni$jmlaHf0}ex(#pfG_36LmFG;9ixqj~EO#Hg#hWoRR&!k&$gd^7ym9y{ z_vLy?TRR!tBO|$H(nbu|KFa!OuIvoJIamVf7SY?&KhlU5vc_;|;OkfI=eh{<3E*u3oKxn?wE>@F^`wMVsA0PU zc;n}D_v`ssuOZFq0L(0tv1Wt6CV(roS1(FdZA~=`qqgh1YLf$Rnr>b7lmopHH&iB{Af5U1y0N>7&NIUBSvA=4=8w4}5A%@^YpQh(77fR1vE`|2|KKAlDYE!L* z4vZhJOt@gI;}~MubManEvGomG|Fxp-FiJTVVMvrP0@tEWPK>?{lRQ^8eQ&56DZXb2 zkLZ{u#}}Y|rfBnIuDktb%#+r(4561|uACX5tqyxPK6iN^+OA1H!d)QCX z?o7U2Lf&_y>=0HN8s!Q{qrBS5ojZ5%Tyx#loV1l^Lp*oJEw;c6%vAWY1>)u&zB&r` z(dRtwVosH!j7^3p_?}pi#d8SUggkz#SQ_5D#F&+mwGy`;b4qR5kZk%-U;5CA2ElAL zB#(--3oTR2%1X*6T7>A5WeKDQX%!omuVLMqil9`>)(=9kq6h*O{5^wTBV;z|e-MH} zQT~daP9%{gS)ex&QG+bfk-{kGG=z-uP=;BgJ%sV>Bz$a`kk`mt3m5XSMOknm<585X zy0=6s;Xx2?X1FO_!G}8s2h8EX65fH2aCMl1FFH&~XN4{8ScDA?>qtkq0CvMjpLK|m zF2*0S*$A67q$3?+zfdI}IvNiIK|tk)!5#604-Z!2_aXk+V946);tAK`hvv!q4!TKM zZ`}1bz>3PyO{%p6;kJQFy5(xR3rOcc*fL!@!lBS%%6v1R(=h@v@gdM*s^KAQgPb|r zsU4N0`(a-N@0$>)Asv*3rt7b|??E<~FmzuYc^6?p=qFgakq$%GC1E@}32S#w2C3=o z=xdNuG!HKGTcOj@YQdd_!H|(h*hJ`bB#dV#;bg=UUzLw^;1wfUs4)q&?G_!Jo8O}ZqaJMunXh~z;bMg*T!`BX7fmW$RA0DognI`1ktpMjVInQYk2(-p&Kmk5lU)jT zi|VHg{PU`RH~cTDe%vFGPOE;a1@}`_e=-XHm+JQiLG7x)6lIu@pZM8#)SpQ|`;~V9 z=(m7i%Jfw4PN^;1XT-Kzfrh|W{}&B}W&0FhfP0yH4WF1zzb!BCi6hf$#|2yYVXy_c~El$a#Mo!IrAP<7Q z9f;Rg@M&8xH8Vx?qsf1X-O!}*iOE9jRh4_y1i3ZA*RFD}d?%(+=+UB# zfd*}`AV~kbh%~%2Ll;9>{509dpCb4A9`G_h{v_T_8%N|nL++LN`Aj6ix(Bb2Lj$iR z_xd9^G!z(zrTICFe_OP$q;T<)r3;h0+Cc3I2j>_*oO`ZiFS#ci$m+mPJlB$YC5|Sf z?Ajh|U+w8CZ^}5%m50!A_?$~k=*S5OL>qeLOW_p{=6%ln=%SzhP)CTOcjsH^_mGZH zYj+MYWYtq6NK|>&>+P4We;sQ&Lv~6w^%JeghSqwgVWA<)A;$#QyUcx<#|j-J)I(BF z7rIC&LrQrR$WnIFDHV8*_LJXqH{t&YH~8UeI%$(?iw`zLgPS2)+qMpX>tk)Zxr+w2 zyM)x`v(S~c+YKE-*DT8^%6bZA_3BdAG;dk+)w2F-K$$viZ@HqZQj}GUvZR7*)$1Nn z);yHu-=!?Gx2y=Yteh@om5H(@qO1uh%PGf5Y*$U+NG;kc-hBc8W8II*F;=d(9iV5$ zLbN&DSK&&~Ph!Zy&;A#?e|k~&GI24%d*gQuuSYB%Q=`$>N0UvZ9A>9Ft?uFD+VHyl9Mw#@D4| zu9Cckb-jW-TFT?vJT*Uiv6qmJknX90s8d=E?w(T7Q;g-OxT{H*YZ0!0*1+YuhwGMq z!JmU`a}Kymux=rYXD8uO#Bam<6oGXk@6ut-u!k_?3FCg{k+p!$h<_CDLc|khJmFdR zvD|5@8x5D`4~5I}1Jv^WitR<#{0TfP|3lS%5iZL=2$$v8AV2GSGxFCWY#Z`x^(S17_$k1*74f?PZ$La@ zJUaYo7@ zcTz=~4RGI6!;iro3R-yAj^8-+f$+z|EmzZI!mU%o>)}46`VYgks%g^THml($;f_|r zF}LyVtiZVqZmSwz510MOa#3$-s~SEB?mKGu3ApQ3|1r3}DxGh`kG@7XD$gOE|AfvT ztMe=CH0@2&T~6zGy*gh}>j>9w_jQC|J?Fid)+v;Wy_C*HAuU5wyM@kF=Z(%0xU8j* z5D0(lmY{BWKuKby$M?D$(jH=v2gO}A$5q3TUR~{iGAK;wR?d&aB5!6{-kl|d59Mk1 z!#Wxd_3k;6IiU{XN3!-Di@f^lYMn~FdIWN)x4|%eXrF$9vTzjt$0px!!}#$N#^2C` zUgG5Bq{NPOW?FVpX!SF*(B#j1LLozO)_IT0r`%Vt66 zqU2deSwu6}U+Q_3Z;%ZdK~ZKkGzWUF)C0Sm;wz-Vqfy>CguMv6^3Rl_Br`0_m%bq< z*DOnWL!RK!mj|A#FL~dz_jFWf&7_Sp$+Cvl>xJ%0$Dc}U<xh!$$C zZHE&L>gss9qIQL-*$Yr(3ahtidUZn<3=bqlLZMzKu0@uFIj*%DZ9>?6P8= z;VtWb$Ds|e68}w?vdVQUR*mjYMH7-~R5-bXN&k z_O5hGg6{8Hp!v58-5V@g8(pWCbv%mWqN9!0iLyRw@m%?^MWZ{u6W#SH-P63d&I#Sk zu%y}r*Jgq1FmS!t(wXkF)Tu3XrF%Cl+(Dx?=UowRSHL&W(JDbhuUTkv#v2QrbQP}t<}B#(-UyA)oAACy z7e*mJ(kgloVc8Ydl^_RJ;R->#Z`dYiu(m?GRy6LMtb&F!mbejN(5w|`1U|l<)U}M? zUggb{#2&cZ{;J*S>K9jqcxV8_ykH1)y87cboh5-1cQ~1Y7P5YjY8!xGNF2h54`Cr; zRVV{8l#qyt4lEb>eFYAj@CD-TOW+EGu`JFnSUuyUq~q&<+v4uu=2-FBD$9ljs_XyL z$0^-QgGQ|max74-#Z#1QORiWlSjxnj!LnFcG+;vje(HVr)@0-N7yK>)=H6pBT+Ho7 zHE_8{cnZAhZxFu#dkN}VSp(iRVLUqtuR{EN_}=^(@!+#d<%lQDc*2h&p5L@&#BTr$ z9W8s*@8nLx#rTDw9J}g57swHQzha<&CJSM6ke)E{5uS!0=}Uu4`jS-oUIPA!2pg@V zk8qqy-*Dg?4|t@GKElx|eNN<`060QNA7Qgf&l2Ph2JEM!hwyj!Mv@*GF6n_y8qr?8 zkiG?BpBOvZi||K?XZw^O9-@WPS;TAYMfg3$vwc1UJ;&(MPyUrSBZ#9|c^jqmOWbN*{Qc z2ONOGYxL4bc(zJUJkDI^0iLC!hj1Exq{j-E^o&;NISzc|5f-PThcIjoiT1h<_>ure z>*yhjy{2fd4alDiI8;XuVH19ArysDnql-PIXfKS-18oSqfW5ocUWCu!NBZ7{OZuRn zN3_={q(6nQSCC#C|Adbsp8dBT@oxft5%F4o5F6Om z13$KtO?C0!iuTID+1EsbCFzXk7t?QJ_}g53h6s@-m!f6;A@D{|wxvYPbaam(_60 znL?if(~#awHQWyOS895^m-tvJcw!K?Lk-9HlLn}M%yrUXq=6$Iwuk2bSm(b*=ijgM z>uGyrKVnyVt}o-l7& zDHK(y#<+6x?$2IY*a;oXZh`j$b)M3K?9$T0-%f#Qo4j0&&!U8Rp$9rRFh7_7GJf1R zaAx>Wzl}nCXU+=-BA%MEeovPvO7R_U_=n_+#(>Jv06c{tNT- z$>hYNdwvf8BcZ(w->x zq8y7_~J>G^$M~i+ecjzg)dCzOlb#FU;AS^F;q3`=Y#(R`x&4l4tyE-{W5-=CfkqN z$)O>C=3+NGt`~IZcs1>Ji5+eayqfk2{aM34_J`Bfry7noei10F3W%L}`$EZ}aBSMY z@IfjcYy0Dd&O7myVz)dGoR7P3?#KOdIq&edeRy_2D8~q0J=S)7v(yqES4$Ytr38hyG7=@kxK(~fdxfzx&3!v)ZhN6r!+3*&vF+~< zcBZ*X(EI~-_}{hYX^y)p%@F8;1+~ut*X}Mnnnz37#$9`>cyRvG-iy{&b-`##`3jJC!!NtxH*Nin0!)tQTDxFRxal(dd?n6rR`_ ztJVe!R9xSubf)_qfvXC*oURU@*gSF1t}{=};UZ7$QCEDP!V_EW#qFcw-q{8BKLqYv z;9ls`c*@|3y@j8SH})>%&QqEr!m}3bT69(pO*|_{Wb)4LSy=YqEvd6|W)@}SDX)7L zRzA+kGo&osiJ@-&cOk3Jo4M4lPn$iw^@qD9MbM#Csp!%;nt(eE;8NAVHdZLCZwwAQ zBZo?7K^Yd55o5_K z{(Uj6eDHqxS=nNtE`hUh4C<3~^SknVC+-%x-j%cJq5o;Wt$D&C+O*)ki~@IUWwCqT ze%{5lyLVR>xS!pRJ8!2mJV#x)Zy1Q%CC@`n{rS}`<~ZJ)azJh+6!+Rv&Hf%|q#2yV z3Rfg-K}47>B@0Wo;6#Ad6}Es!$GiU3E}yt*xMf@I@|{RqKayn{WS%q7Zn*0fct6@T zRnck|2+3_o`LBn&4)=I=kprmmEW_in@-~1En1Y)=dd?+ze6S_f90u+r`H~jgEg=VU zkU6@DaZZ(6xeZ}M%?nG0mwXPZ1WBVtz*1h~&1Z2RgZHb>%JGS`GeF91&B=?hi)m@3 zrkEC>z)^J3@&oNDz?KGXmDCl*p-p1lFGPZNSbZ4ZXAQLAtZ|vcP-F8JVF@D{_vK;& zsR3aPIFV=p^BFll_>3G2W@{qGN)m3(P70@83E;zhgM$eH?&o2Nq&9LP>kNFWfe$T) zytJ&57-&GfRs)yDNrn4X$M=(bPR;`jxI@$+2RNM=c{`BW=?a}l-mDYaKQ_DiW>|59 z&*=&aOY`(k_(+aTOvCM(kL39J59HWjXnOpv^+fW{zTTd-p@9%xSb2?qeQA-U+bDa?7aE zu*ebX-Uq!lN?$w$+Z#{0%yBy~`e>cegwrOD@u$!lo6!%bQ7~$Yen>(;0H@jywED$& zn0>&$;MjZueeeYOVl(;yt>^8BCxAyn z;x+mR?@;NfMgHA@x9I30Or6=JXDwXP^RPh67wr{RNjdhFrX$Cky$T!7KU%@ml{8K7$|W zc^59}c@62=Uk0Q9o|Az0>F6O`jUU^K zXBu=JDt&JP-ztPH*U?9~5I@pqhfDhIQt2x~`d=e#wvIl+vsC*2iuii~XXxl7Y*Xo* zhWPn_tvdP$mRAL+sQhM>o+(sKm(`XkIwM-O46N>4cO1p)p6 ze08n82!9K{JNs(`^79Dhme0^d6bJAw3Ce-b`~AL*-u z%l6uV^z6S8NdGLtwjjOMpM*Cdp7cD9_+5ajbo3E^N~I4Bl>@s0uh!8=80Q{>o(9A( z2VAD3hp-(#(vu69^vqW2!JVT6_aJPRjvm4pDm{Nk{9S-;I(i7Fs`Si2JkLQU>F6Px zh#%Vv=O4nwIfkGw4tIob=0V=Ax4j6HuS@!ja7kY)`08vQmM?=JigONcdlAMthiI=G zfbT27pCVrCPr^-zXaBu`{Oy3xB3|oH!aN6Ie^nqq&njQgDd(^rDp`v zKZ~#}I(i7>oI~k9#P0%JrK5-NQz|`REFahn80Q~edI#iN9yP!9Hi1S z0e7@Q0OMT5+g^lQaUMYW?m~P!K1$6v576i(dPxic&;0-;)}&OMKZ#oRebR7B+PRP;zJt=e2M0ca|#U~`BIpg z6&YE$s78{^fB0 zTlLRF+JCD40N{B-%^M3mVXFTy!rxH+O$fhJ^_K#FHSz)!58Br2Kce&VoJdPksq<6j zR}1erO;A>6J)CGLk=n_H?tlWeq`IQ$@f1Tr(lt5w`6Y>SIL)}0-08TnNxJ(@>3P{@86}Wo(Zo%E z@p*?G??)}(7rNS62VFit<-Fq%-YMqCpA?LY_c5bMa?s(U;Gm@Fg5o6t?kp?H{Cwv7 zDX#Ya=bU%^2o4P$==gDY)1Gi(`V$X%{MV8j zwg=l+d#-ifF%Nx7dfB1OCu815P^V`EAdyBrwO~4Yzok%oA8_t1eFrxNlb!y&1D^uwtnGx$BeG$9c>c?k54=AfNa|^N`Fe0!kpUNSQ~W1;8Y_BryG6ay!tqO*Vue* z2Fr}72-sKjTzMCAq^)E9gdAxc>5kBYKpqpVErT%zq$kw)X)YVxC@UR;}1Tob$CS|xDB z16N!Zx~nWGUFGo)^vb=43c5o?TT_PA(c%woWnXjW+h{exT6;yQ<-XRhb9+^aa$CVS zZxM2o1Ed$%f$M1X^oMSbeuAI)1oR2f z;_f9`v1Ws)ZzE|=bjQqy4 zx);Wr8J2tdTHLGq;`G9-*b7%Q&<6|M5JsW5x9(-gGK%xHm3H#)XsPry`+9Jt)?>7S zZj$^btI&dXoAkT6Lb*fm~((K;S?PDI4h*$FnN$pe7>?>8Xjr(v1cuG)%1! za+MkltP426LgUooAVmoqrI0UJVkrM5MESw?^w?B-Rv|t2YN<%C(L?wam7dQKp8*KR{VF z?%Ona2uI+@_8O$R*guH&0>9;e8DUs(d)td}D}qQL_aCJ1EcQpFrw#Z&LD+lPM``pC z{u|=iUUvZBM}Xf!yw;zDPa&T4G$4Ny;1h_~=p%d(@$9c{$bT5{3y9bHk1+OkA|Cv# z1K9gu;??$j zOdo(aG)s^BzJC%g)&azIk$&vIVlYm>RQ;&8)C&k09*TAtsQOV~X%^COFNQjaeGmP7 zxOSnx7VaNae-`qA&+Og1-J<%faGz5BU%@@8`u8FI9WY0swWf~)C-@aDnh$D6F{uFIPUxMtH{ zU8e%LZBhbDOMcTKdG*VLtk70JSI+8&aW{<@8xtXCm0ng-@=#vq9S4x&`K5AJ`>?R& zzJV@=r}sykKV{$1j`gXw@0f!ZVI?#EjC}|5^VxyPMF0GpeaDaB@S?odzN04`%A2OF z(XX}d=m`giaA<^FOU{ZooCcV$6BO? zsFk!D6G0(fa-j0+X3+K>>@s{Se&N2u>D_lkD)-#lmy5N%NxkRxK6Je8NXluL8yR*2;eY^Hp?u&FXTsnEE_Bq-vp#6gZVkgtStjjK7 zqu2$+VfO)zwBoG0oc1r;{}#->$8g-HTA6x7^iZv2z{lxpEQGKiIuoK-XUR^c8FS4oTg+v=3LQe$CK% z@3Ku${SNjnZ)-9??UpXGZ2daq!rEteF*f=r?NHhUqayvJNLuOJ;gpaI)7l|Bm+i1i zv_sP(wgaV4ly>0BHuTN^|7eH%b?uP#inVQ1sn!nR3e{~#AMD%?%6&CO&PtPy3+*Bw zH=v^(+R`+PZGTxT+M&(f1>;MiWuwuu7QK92+bcretgB34kdTivw|t$O40$5T$9Le_wTe1m=g#0*A!CT#OSmXezJ&C2WR9tHP8&W|BO7Zj&c{%pt;r` z5)P1PfqczCNH0WWegLVZs3OWIeOCAZa87BSbaP7c#PAQ~%;2fbx7_=IoR&q2o|!ht z^qf{=W(3b@z6IEh?w{d#1u{L)Coud$TT1hgaD-M;TWf_YJdXNQr#DY}2|5!KD7ynG zol3~;?5}Wz#aWyC_eu36yFMv4dXi>-0PQIm&HeYLHiwRy1q%cww{hkycP-qwnUd!g z=-&;AO!3?T8HnzF!!J-qjoTottI`p2OPIZ?yoQf5$Dw3yUcU zWo?e=1347fW*Q2~DBrLdkZ7WO$t=&%geho4f9S6!Wt5h&d7P+gO(12VGN6+b78oF5 z^K3#IsYf|8JVVhA>t;qn)(AU!)F`-!HF&bc5Ecc!#FA&-WFzoEG7DdsNX%$M@f#M` zl&{QZ<;|3tipA{qWMIA>b+srGYB7nF%mGIvZW{OpCRiSEwDb~Z^Y5B%b44vA6Rgm+cOckYw_|0flW9D6(TUC*2+$By}^fZw z=Hm#Y^x)LyiLhid9ujhgF!By#1RkvvQdE$*qJ>Eb+HQ^R6|k;BK2r$BNDXG4#Bk|y zmci)RR0Muf0i_B1eK^Gvf>ix6mP3lBdInaSP%`8wCqq~IL?6$<1RqbxWN^B`;p&e% z4?w!aK%~JuQ+JpKy6X8O2eA~}M<^9$Q1q|qcuqnRLu zs7VFh0;#r1Sj;I>ftoZL`}GOD9Z%rh*oIMrk>Qm_TZ>Ud{jkd0Asxp%0lPdE65kKj zNs+3o3p4@;*PvJB+;!~Y{!e*#9mVv(y?a2U@G|d4V3TkFo507g>1o6wU&dKb2zVP7 zgp)TE0TA#yS%OT{9>REbsxnPSehc^k#6up6GEI93GoJ9bkfGr| z=M&1v0R9T`>fUK5;S1n-kf#LMCgC<9J@+)P0N+`Jy^ZvQiH|U3ngo5|{RsMMk)HI} zk-iRLyOCa_k8lm*NzY#p4|yi?l)Us2u2$(wL;MSXA=~7okMP4PJ)w|sZ~%TtM-O4j zII+DbQ{PO`@b@ULPgdf{0 zQFTv(ce)MuP66LL*Z`gYZP zz_`2UrH`-^@uY7C;-3W!p0BsP2$!k!SRjkB3~;fI9>Tf!k)ABLq-T~&&uhR(8KDdv zJ%nv4J;Q--HsDkpJ%n#j>Dht&a{y1!(L*>HKekt_>ehqT$@cjh@V$vWFL=e?_9FZO zex&btxTFvKThU(2C|iQC4M?xG7hxyj*}@Z? z1u8wUkTubG!=#V>M;QECL9Y$*l;4@Aqn9vwd)USoy#n4P^Sz67ClCfcskdH)58+21 zCwZMrPhKa}FNeNkjn}D_tMNLS{#v}w1kgZUC-WxL4<04uBqyu>I>gP7?lvACC03>Mz9@FH!wjNbtJqx1%p3RXVd=A4A^t@UuKVEn6yU*&1Q_-;lVU5$^*ameSV@KFz9Y%)L59|M9Lnek`v zQJJ654t%rq4_-ls2CIC-9`%L&2o4R!HRU&Y!lAVV`I6V-qxOUYSsfZ7*W#lR$1Wu9 z+8%6Q?di@(?JN^B2YtB=iLK}leLgKe-31GZ3l}K*dKZ)~DFfVD=NM(&@h2Vbfm+hmo538D>9@v z_N9=QRFh9D4B*AMYY^V-wm?pUe7Mgw{b2#+FycoJX#}{rA0pqkNhWefjZ)OZX|v@h zsV+6_tYK{A^>U-NEk4npN@-M%Q}|2CV_8av1}m%J{u~Cs5n9Jur9P&p6R;)LH8QB!!}2btuZvg-b>9<*v|BCp!JtT#QR&E=~8T4!?vb#a!Ab)J7bNA^_QZW z43^u!l2QyYxb*}I&f#|19pL=tx{=aiz8oM~+xJ9C!^^X1iO?r2AkhqK9EO`ru)yuQHf8odkZ5zJ8*HagGU$>rasTF&>>q3eW#_P;F(kf)|DZk7 zw6QjI&fl$VyQA$9x>n6vrEAsqG%jx2jjAliNByqWssU(KvpdmdLQna*O>7a#$0;Si z0#aQ>16tePry7*hy@Y!AZ9wVLShh;0=SpkK9N7{qCATcO8SXaN}jmlCbg)EB8GJI_zwgS7q zZFD|ySGU|HTe7647wyvMUJYaI7Tfc7_H27YqP_KH-^&4hbT!%>$V*H1fi~v>TE;me z2g9~&T-GfI675m87wxs_(&%p*nF4lE%;i&C{@zh8?MCuWbD*u%Zm4qnQHn~;m)2#< zQKAipH%ObMODjyfY-em~7x4UwqUkZ3h0aD^maZcQM-0wvd}F%3FMI{(b*hwOIn~XuCA0EI%*TvZTaP zmbWv%aZJcg?S9lwus;dpfDeXN-Rt4*~ONzt953rd7s z8jtcITP=;jFB`vC@p}vtkiiGvMofIYuz>6p%JGhMcos%ZJ!A0xwdk8b0 zFyu#$@OuOQfir-)e^9?+I|)CFcz#Q;S31D+_8Pf*XP`K z)WT(W6!Ww zk9du4!kLICo!=txT;-O+5`eFEEvc^RLq`su!;`ni6y ztNs&ke~%yY^Z6Binm<+NzfR}J9?6?#zRv%G&X0ETra`}Y{amf9E6&b3kW!_e-6<|322Ur>v|+BQwm5p!2|;Zh+bp~g%pSqeGe4uWng zhB9>oELgBqGn=83k-2oSph?X*JFf^L2)dlM{Nh|4s8vC$C`@SNVOgZiT#Ed|RpqV6 zSu8gsQl*Td*LQ4U;`n4pS|{JoWxc)x3VyS5^0Xy;SGfnw2jpK!l0|9v5c;q3@NUIn z#L>mD^ZuChr>xh(`w{su6s1q`vQB5lpRrzNem>mu>YtypUjGpsUX<68d*}&=N*?DW zw8x!GAOn*lHmm~fyiV>32a-DQ6VJ8Q>%_q_yS9hE`>wUtwg3UQo_d@Cag;R>hDXBSlbSknkW?@8P-Wr%hIHE#yy7TrQx0{C*8*F#)R18#u52L zPs)}%PRcR;Mm7-lF%|dV25Z|*e!x%Ln|@NvqiL}=DJsb}%4SG@LpC|~Wx+b8NE>j2 zVM0Z!`|ti=A1&o-c#EL1+U>*jpOEEN>lWDXg<-Gx>wQbiUmslt4GG!iuQx6AY09+S zZA-FMr^h1iayK+47`WbxF&G=I2w8%?#`SPZ-Hb0pymPEH>eEJv>prZ28qgAy)1^KO zuFe}CG>q_EnTK^P_05>R-c-t#$%Jp8@XdhlsPNg`Nfrb46|n}3?F8Dub7iu}Vx!#& ztuIVAKEs5)(Rh2_b;?q?1otLIcY?V{SI5EJVHvvirR34#r|08*XL?% zKHDtFy``n5&|tT=rOoC}<>9m^?fvXhbalECI$jO!Q_#;Ijb684R8ilr#m2F-9Iofe z!!6b}zdNFZbWKf>vhyr$Y0AIDHWIM~Eq})S0pm8FmMXOhIfql@?VDVFr=$@Pu+hlc z(I%%tqvy)(7Q+op`BrzOS05&d#z7_6$2D=+hCCyf*c#b4&{j7g7FDq>}If=7%V2TceOlxnty(n*&xqnvONs&|PT=nJWJw#<;j2#GOR4)Cq!`&TE@?Q`{RvLclsT57#T z_7i@o^(I-Fqex|+b5e{#;cIBslr9vqrb;bYhm^uT`D^l1FbWLGq`xBd@;TE!s}1MR zYYb6}RKI?FEALAI-cav58ra>Id<8T;_p`;?gVPKXJXhwpj7}+5YMr)XBi;w}fb+jy z&+X+7uhQkS<{$D5$3O6f{I_ejxHrI2BE?$23|)Z~y)llk2fRM(!9|Aa>)U#-@Vh+8 z_q{KA4X<0|b2&C3@0+K48862M(M~vQYMM6TbkKji&*d!X{%@YX&UiV??<Sw^tDNijo zxD4OI4t89K%W#$!#@}@r*Gz%!UgUqyjB<^a?Y?NIH8^v}%?6)`abBJwd;EewcE52q zPCg4hcE7&4@SCRxAMsSAZ*WN$TU%@y>F#Il+u-s!n&RHGJWyihSKuFB`iQjPR4D%fWDOywTce2opIrmolpbAv{Znghrba77U(oV~TyRgu}I-`jCJh1;L zI%>ik0`q%ys=FI*G{Sel#lEWODY#K^SF7>M)p+R25O>0h)%d$`j>`>n1CD*?BWyO# zaS7wuNtkD`U>z3izyb#Q?joK=Vrf+rtHML!a=#aX^T`-2p8TLAA`D^BgRqA%@eqbi z1#xa>f*XSL-(m5@dR)XgT`ba#N4^$>eU5WF!pukbUBq)umxlN=fWe2~LzwY|PvVEO znxb8B!4oLLxue)0m&3(6kUE`(E2FWvU%m*Jcey`N-4Edo1C0GW?>iSAgc}W)d-71Y zJgbX>i}N|r-aLB?1AM>g&WCFO%riIaVT*7s$2DY83|!(F3YYyc2rgvui^#)`g8L3C z!1$AJ8GjHi){x@P`iJmOK!4Q0t-^krFrJ+?__qo_<}ZXh9PT~XpNFErgE$vnh_E?G zPZ-Zm!m0SNUU6_)UJP8;i+fn&@kiQV)QtOZEOW)W_;*J1ANJ2Icb)3zmG(SLYw8 z%j?pGW2}1dOx5}Gb$)f{t?r7k-=AX#cPfK$pA=7Z1it74_mSx3Dv*ekd&+F00xUEH~%4F85Kp@vrF@SRhkQiu67k)5UygxfU>C^9F;89@RZ00 zlIE6_Ey^oXx^YHH3Dgb?>rrJGqCajwbX*Vop5zI-`}H%k%W~`*tA{AN-E-mRiab5Z zqP!~&+KY!E{c{!{swGHAmwR^pG`_%3;rD3ySyUz%2;?(JKZD=H{Cs99%m)R)|DVI} z`4JpmeAnXl^n^qCY$)G=Yw>$}!T};28X?!>_wL>SkdDL_>&&;2PiN4IP4hxF_zkQvD5X(J(Z^Scwg=dN z+hK|_Oc>y-gk&n^w`*};G}uWAL#yp2PmN#b`tYhJTcj;qp<<`*eqWBLIgC@Im-0iL z!yCe@f$4ukc1R;A0X-0s-9!6OKV_8d-^e@Lw$*0!Yz{1f?m(+&8)Pkah}+tfRXl_J zy-hatxz|=Z^|QtXTgVR7u4X`Wr7L)=gniY!j+Z=Z{6eeKnuks&?!kyLUjij-q}WPV z(36#}fVZU9XB>h8&-=2a25nSFx(8ODc7^t_Hb?eJjO^`%K7fc++u#jp&56@Vlhsol zSkjrE{Yoyz3XPLU@gDZupf~|31Fat1k#g^PIecAp`k)Q0VPe+ptp@+z+a~942esQ> zp>OeiPWWbG_%{C~+&X9O&AM{7v)${OH zgPyD#3NAyX%k(_f{BhV%9woL)m+@P0D8``0J(RjtT2x?0oWU$@Vjnf6x3)}MLq3bG zdFZ0UcI(u-#sSrXH;3$4k&3=^yp%r(EgAaOcC_JkwBdHN>hHcP`a^gV@czLN!*&{2 zO=?nYk?6hZz=F=LC2R(f4>8J?n6+!_=Zz8j60x)Hy5msx)SF%*|LkgeY4)jP;XMQB zez=&@JS^N0b*Sa-HPQ(3G~oMoN^|7RCyyH}gm1rSH6rZn$>S;TiI7&vm9@NmQA?3} z(ILSR%(-0PA>Q^pL(mI!}=b)O%KDWS;7Ba2yP9MCgKcggH$iINV$gh z44Vvo#$;ozalP?`G1lETFy7raGQr(90j=Ga_qre_oUo$B2-)1hGgCdA60&fQ9ycM1 zjF6YNdNu|gYI)O4nj}c+n~p%#`N?RvKk)iPt7YE=;GeAFUJ1O! zuizY9gqsy8Vd8p;j0;9mKl+?Ped@yi7=EX~Ti5F=LSo+oQ6F2Er z@Ne|uC*FFM<~)HHbcenDF>s2u80`)O?!cc(^P66pPpCBCSUw0eztg0(@sHtUTc>yi zgVs%5+CrgJv_*!}&V9V?ysPOy+s=^Wf)eA^)TGC{Lm%9Z6rhp#(PBt+5|D;K zFkqw<0VlUjj07T5rC#a;k~o13iGcppU+n|}(g2zuT12RUg9r#Tu^bB&B_di1rUj43 zdbpgEdiwbRnaNI4J{UM2=X;*D_nzzw3DMK`{|9!~de`;c>$cZ=*Lt6&*VW(NA8t8` zlu?%K4|ta}5xotDL{y1(m5BaP5c&SU2N9Ae+R2ME3yO{ z*Ydk>4m567zkMmv1Swy7L~={Nz)9^-fTDMYslfCT(+eidHVUx6F@G5L4EDAEek0Qj z|9oG2OD%0uM{0Ev>hIP+YvCRSH6Pz#HQcFv?Z-s8=FW<0?3P5&{WJUyiZl#3mFXT2=bZnfhkF>|P!4L@cXJkblJA+?gZof!BK}0~#|PgJCD$V*HOI)4%&%uk zYFUK`OTD>slZR!brZ>Mw=^sC>wuRLmmOj%0XOkG(EdNY@iykeAZ(+g`D;WGP#1}& zF2AA4-?x$9ShV;|ehvf#KV!u2AirUJ{&u4tjlb_Azqvsg!6f^W-}IG+#-5Oi^e4aR zD-AH=(HZGae#102A#iAU7_0C4^YuN?#y21h%5m~hh>TZ+O$fFJ<1bVO#Bh}PR3R+( zexwQ{KwTlD%!hIwKCCJP3(EOm{nkH|y#nVHz7}USI4_9<`h`cJL);Af4~x7(e2;iS zC$iHTZ|R&E^~>{?A}ReS5DtG1TiVI<6_g>2a_4(9SN|*SA>sLjw=1a6y2D-W1}ec? zXpzU|cqaf)U@CM+C*g*Z$*;?}k0D>#<(^JGS7mQp1T>l@Wm^*Ff1I7w&iM6TD`t2z z+U{~w$GWM4SQ}Lp)F}S7o0`;522*CLyhnq&(l7;L|=H1Ll*HgNw0TMbrm>Gnm)nr=OGksTUt;I)1XgKBlHPw#mVAWNO{#sg5A!%(DX;mPt`5|{XJuL1Q3cZ7Bj=0Ndc01Zn$el>t zcMbhlj>`Autez#aQ{*)Pd1Z?Gx7ptIblQS*d!^PQuM((~xNoR=?t*_>aMnMx=&U~x z8u;T!pY<0>#4I@L&ut~H5Vh&g`txl>pg61DH-x)}>gGa=p1qSA<1@UI+WNk0XfSXc z1|2=Qq@t5dM4#+0kDHLk5aeM; z9wTfc-KB2wOQfB%(8-X!8F+^gb|Rd7=Fe~CT|@s_0UUrm)R8CR0nf<)on#Oq^PRm?()6n;TgmQCqgZs~JYS2^j9vblp#4`b|hPY`6cpBoSp)C2k z+%%*jgAR>u)zC5Wed~d+Nr^8pK!HXP?NUtX`QCx6fd!g=6&RSyfU}V$us}V)0!`4c zK;J?;cvFlw`e#GYDPs?2c)+e8YDI6D6-=c+%!+!H*RlDvJuoYHhfZ&p71hA3s0L;Q@Kb{~ ztD7L>?!H-Fy>Dnb5H^Mk%fVY&>y82!EAxce%`X7nvK4pcL<5UeNUmAqxOb=75y)K2 zTZMqtvS;gj-0IT;tcf&7V1f@g6u>i0n8Y>$w1T}tDBxHl0M;~|%*lpIq8eYS?;s7Q&^;nen zFcDq|JI~gvhdbsx?mCz}6Z1UI=6oOXtj*BDSP8dha5jfDep^TbyWl`I=>LNMGSG|Q zPn!Ou7s8)&J)9wGssWAl%ua3oxP|m=JUm-7Lo+8MJm+-};p~vkpLTXg@b?7#Z$_L51AnB=8h_`(A8|8rwkXISX`V4+{<{&s1CvLd zG1B=VeHIV-;dvtR^D)9R{~sazAK-Qb;dOpUzYl+w&#&Qs9P~l>>*Yln*b1V&aKBR% z^^qD4{E#MI0?P~cxCj$#AHiP)urOYQ+bRQpq}Uja9#fj`oZ zYW&@V^r#b$z40J_q-SgVy^8qrLC-MoM|y(Bj}!4HgT~pNV0n>F#Utturl>!SpD2V+ zfLpwQAJWkpKTp8_X3!A^en^`&e$IoRp`dYIsJs3^Q)i3i#j{&9zkn_k>+c}a<2kO+ z5MHlO($LKk{2hTw{u&XU^|t`w_rncmyMpyedI$Vjf4_%6F#&J}C|F*k8{p6OUI71h zK?D0Y$RBB(4HNtf!5OSopr1GJL%Kxs9}oZepq&PP(mXqc|D{v$2TK|ENOTm)6ol>+ z-^&9G3(5oF7JN_ATqiL+&mkbH=#n()P7{VOqd-uvifP$sH(AA*W=}=<)tdbi z*ng+lJ*;QV4qY^<26pDhAKp7?-(s+*8SFnb*uxM}k4xc)KB8U+#Greq2a9?@YioCc z=plN6V9>pcIRs%3`T$?h4@uDfR1UNW4QdD43r#f9-~;Qok^@~tB*w>oDHlS6Qbzm^ zav;X%Z{6P@2f9HTYU23YpB$*KG}zzx!`RTT-d0~}AgTwC`1L0TVj5c!GPFEczWT2} zInWv~O@1>`ABM_FocPYb%@ z;qkIXW;!aC?B~FeO*MrJZI=|tlJ10Lj1XK%8`YaSYN30E8#)?4#x3H!+q$Z(u`EOG*6Vk4EqanG^S)#@vu_}? zsd1V#nN6gI0Qy#lMCE5Qzanky&SxE*|}f~?_9Ry&gBfs9(m_7SI4|_nJZ%6g^W9w zi$d;PZX^OBWfzoD-1yGrL6A`lOdu-88G{_;jF!(CgB;`x_-XTnrwx{g_G$B3fj~;+ z&p~dRFH)d>7Wr*!i1=CLkKO(GeBysT;7@&=2$4klwD|_7$=>mh#f@>Y&#Z7cAg#z% zb`<7%C){_`MOh;eJ}Ju}N@$VaGMz}CMSkm}YRFx1pLky`FvKUko$npLn!Z3tZK3oL zIG<}N6`{Ppp>t^bbY;7nsW5#?DjPcOrU=}A4s=dRQE)D6;98>6S_1o~0MQf3ydMg= z9??3Fqyeq7n`)@43xG3n{V#ONbTY=B)UrNK^_&nmcM8sx5l$u;jHtf>cJPF0UJHRT5j zvF0X?-xktX=O0)Ax)c7CE0n>XH2q1>g+J$YkSPhgM#vO)YIDUcOW|LH2XirZfo4ub zc+TNutdXmH2$QYcUiwyjcp04p%gZOhn%Le{PkJb2@jrf_M(+vEO zhTK4u=OXyu3_8}}Px>M%nlg)4h$LC>TM_OnxSfW~LT?A8KgUDa(LtD$FaqddRH1=B3iTo-(YMh{9s`jn~YSqCK} zB4j9@Wq10)6g3ITb@Ac;_mG)<*K;!y#$`^li=U8}R95`7qI_Wx<)(MNr%h-Rl3lG! zF)o4({e6uNupi-QqPYeihWj?>X8c-wX0;EU?p{Xx4)PMl=dTfQjX$i@Jvyz)2Oj6` zq;w0ti}MC)=t=Y|FX<}{_Cx+CTj=lHOkZgrst1qw^(QasD-D*f{_79thG}3(5@l+P z2k~w27b-6q1s}fS*BChX&WuO-i50>V>X~L@Fg=7p!6-jr7(N_7@jViLFnax2kWO$+ zF@y+Q`R1@mwz|xzhYm~js%iK8t@oJPn$41ZmfyN5$7{R$Uhlxy_qBfz%^m2WhpVQ| z@>|B->&o`pu#Y`(7*F8R$BHww#C_4RWqRI8sp6(s5kQ%_GdT zA2-*T>{veo1JVX;9g9TFlYNS(Lvol$T03LSz}<5?yhCyK1}>-}bQ?{6F&P1@qf)0tw(g@1)m~dKf^W%cVZ3%Qoe1pUQZ>b%&*0_HA@c6{duC=SW^!IHBqX|0(wep2FmRYAS*h* z@DC|M$<5?mHA>5@$`~>pndP^|v2>hx(+6BwQDOIXVhqkI6mqwDK2{qjpS38PJt(6V zluaSZ%omLn6;?AfEH9Q*cNwLkj8c=h)?bEl;)wwVZf-D^Q{?G&=cA-*JUgLL#}d;K zNYr)lQ1xu65yuj`dd9ORH9&0Q8Sq?jp9}CE7g+7Y7m32H0=BVt$zL3{-7d9#WMZ51 z07WKM2A)oXY3vE$dOH5v;Cb@a&rm)kE^FHd=6k)i*I&lTgn@VKCF|%|=lRsdyK>d? zR$ITL;{}hk(;5-B%ltN5@9g%l*MUh<6w&sf^q~LFhFq5`QNs@HQTx@|QK)<5Eb4v^ zVopTN<#G&azp*_(8aN)&&5#uxMGc{^zm|QgR8M3aspBnwxNP1q23$5vIBn2?yD}P` ziK)(V7h6}2*1D>*Bayz#$(BVF8EbpE9Nu=cJ8iTtk@D+dTH2$K_D}s`uUYv1rc=;! zY;hGQnw;6L!SXHg8l;;QcI|X+cKGQmr!~clFu=L;No_|>A26)5pj9nB6W$6FQ`s~M zF{Eo}P&(0Tvtv)=U2Rsogm`o0LU2T+8_Bs-UM}-}t8V2R1JAVXgg@4S_pB?zsb_#G zbll-bI9s@Dj(?m(<;>Dp9^`9nuY9coUmuy)I6pwym|WJBET_uvN}r0@^cL>T6(^0+ zn!3j=NATQ|&`CJ5su9|rjYEK@y8-oLk;3a5+N@G!eX`sF83k6a^<2RQt~~5BV?1j0 zLpMkzVesrF9 z!Xx1_Ps*^jVhjtWD{14Dq{O_3Gx9>W;L~%^f_V@6j?x$L6bOQ&&;&O0YB{L~Q{e06U2MI5}NbxeEV@gs6vVAwg*>FqP3XX5@I`r8#d zcx^U=N82oLIDS~N%+r>Rz-GMZrgX~JIC>rk*dzC~|51#Pk}@E0?C>(#l!4J7dHp-i z)t|V=Z_8ch8qq2uU+ZYUFFHd`k#mHeLEy^mfrz%_rjvfj^PqoH(Y>z7dc2RxMC#KYms#lYGj4;181@vzM-KFR|8#n)_W2dRQFsN^(*V{$PL%) zWm3j(vd3btq3n=`%WStMAH5)%tS|#t9`!aj?J~})Kt892o8<*|bB{0uS{UwCSmfd+ zqIX5>ad#nldc!s8bjtBA$kHjBXzY zxA2qHjr}6;e*v*9Fp*;)$5f7tKlY~;?bX7n@gq;Q_lRpfNt~V2z%Dc4CaJ(gJd+A8 zS|g;fBhG*W$H~0BQzKm)<*G!xv)C0Q50zJP{K7c%o=Y7eoni#D0}~i1cWo)yud%d! zEG={5i`cNk1$<`5-d1W?|A^^H@4GCncVv!QKn1HS1YVsOx5BTTPLgkyf1YO?yF6_i zyIyp*0NL1T%R=m*xAKifx>8-$w@qQ)>f8jbINL1pkARU(Zmb!{ zffWXnySDwVa9QOl)n%HP>f8Z@ur$rZstCDP-VPH08GHr-~CN*)5%^RxE7fbKC((u(-oo702mm^#Ar6`jNEje(d>*5Y) znoDY1COQ0;H3B`*FiuwEyzVOELqB4*hj*G{e%omq@WtVo9kv*$?S%NYetMC7TFq=H zsq#3C;^-}JL+is6xN`JjIA(xW56*Qq_W#CvnG(K;)?|DOJ)8yEU3z(#1gf>FHT~K_ zZT{&quZ|U`o!MVsyci){lX<`W(EC0P_Sc$={N6M=QF}4t<*ZwQrq~hg$9?x+Gf)7! z=dtNN+v*p^+2m#i_SW#_bkr`*T?cGw$+f5LBeUe1=6A+U^Sj2pB3C!Q)maiIjSz3U z9vW{KO+Y(;8zcDL)%Y6JMfyh6PV=wX&F=;KB4@8s@WiMwro8trPSjKQV%S$u(l&6*e}9<4dXeG0|vx7FayPx zr4Z8RB#h=GI7>C*wl>~}W^d1`HQ^K`^pL14Ul7;&fIQ7#0X~*a9uC{Hlfh#>`2lBR zOc`v~7cX!$=cvvR-G*<@K+HG)AjWPBG@<_})&T=fI`Ks-#@CHH@CAYK+E?xOBHX{7 zJO01F$b0Qne5+(f%CY>rMEtD~f0v5C&&EFF8*y41@es;tU%PK3$0WyJU-P(bqi*w=Zz($1Ggj0`OlaP`q$AM>{KbTM?Gu8h%tfDa3BOLf{@-4qO+}NIV zS^`!lTSH#nOQ*i)OBv>oSz^)%J&oC?(bFTW_Rv{x#08H$^Wq8fu?tcj=4Ih%S<|Vr zh8qUXe}*2C=f7JD#|$RR$(0w80J9Q_iBGKfx@_}lq9Vq$7D)q5K+OjZycMI++4Dfk zhaHR9wrVkAIJ(vi9ra zNB%1yML?UPAQ^Lr6y?PhC)(hWSllsie!2W6>hM8-rp=!Fp#Sa$_8PX#U!M1{E=}+? zqdcNe|C2cbtIuPTIe(PPX~;Fo*2{@c@L#{FO!!$gY= zY-%wFe(75w^LsM%4APp89w^$-DEYWNCl@n-^PGFJouGVUa$Kk66L}chhGVp|Ts#vE z!~(=R6tBdtMSYC1cA8Dpoo;M*N3)OJ=l`J;gB2b2a%wr_KmOlnr@K)Hv8L3)XC4L4 zEZ-?Jm(Y_P!^N+X1U=+xA-j9)D%^0S<`M(`q@x(%j zzLtxcY2b6e{KNkZafnc_`f`ADfU*k64w}A#`R@ayotpe(3+dB%ATua^RSo0zX!LlE zK7xq&@7|%AH8A1j{z<%=?mFPD&xPB=@!jc?mhlXw+!rRq8t$$*Ro)yA6He|+5NOa$ z)y#(>^q`!5OpKatGtQFoEJ|ujceLYQi}Il4^xzjX6}Nln{>Wrc0uUG@TWC%J4}|x^BSG4nY;sz z?p~bbWB7Mrl73O6d1e@5D1ie=K2eV%+^diqK}_gg1(WU+Bk}z%q0+H}74oaq2uu0A z6+FGJ*@vQD?tz_hb>c_E8kEDMoP`}MN%fk24Br2*n*9sdk8AcNu(xXV2H4-!?3u9d z*X%{G|3tGNf^clK?hcdt2;?CHJiGv!eDGHWi*Bb(U$;+#pKhONu#Yo@S!!@cnFPcC z#1Mw(I`wpZWC$Z<>6#>21vArCLW?xldl%{M5rPZ*u4u&)cB7--VG@q%mt?)uS=$MiN4EV z2&Qcz7+i97_%<9Y)LsPQfAtM}I1#I?bl#E&N}q58KuvlaS~NO%y&iFPCH5hnE?t`c zRE0pN>q+UMRM*_nc?4ryT)w2d5`cI}ZC({X2UzFEvj5v?gs7}5}#N6bZO7jzw7?N5AN)tcZ*^X2yH>^ zw9xaG=sx0{u4Gr+&KwGQd-**Jq4C%7qlu<39?FmT`!@RrJJ5F-A6;Hria~KZBYubd z1IFiX+uyK%aDz0|#PPSk^Ok+3p_c_^>;3H?^pyspdhm!}fBOea;{Za2mWQ$W`a5q~ z0%o~?=tO-m-VO}X93PFp{`Mf2A`Qk_qNSn7#it|qyB#)`i+*Nvltv#zespKvuu5m~ zCmE&-hsGUn#BhGy8BR6>@{CV-pT94Vjy?_=0}&^F!;^t4|7F0D#`(F`%Nnz~rd#*4 z9f`mk##$@;a|PzN2a-U~G=J)vf0j*YKR5%Fj=Dejhc-W3KBb&z)i9a$PCRh{GTI6E zQJ;`AJR4-e8N)it_DM=w+;n9}i=>Q& z?0Q*JHC6!CI0<9IYMbk}bEkgcv({EON_MPh>uf?gi5aM3YBbB~Vn%mA@C>Amfqqlt zL;lpn{cR>wBxb!DZuV-Nc)=<^y~ezLuVhtYqPz|=(TE+E`uidA3dd@)LWz7W zMUL12bd=ia4k-)!BRRa68yIG_5<-zXNFf!>4AVTAMJCG;zl_9+rU>U*FBMC}ITyF! zBq>+mrdQ3cgw=75n5~@fyKv)H!~pZzn9eFocE{_y&)*+d?F_h$QSyOt1mVy~4p+YBXl&z-tG}_sz0@*pcT}*(N|FNO;|5~Z z%i7@H&?+b2`2AC>eYezFf!(ZNHr;cNfd2YgUd66ab)ebW5^?txHF=>O9{UTNCEIj9 z+7{Poi6>&;Cs&Cli%!DobvX}9<-&E}U|fRWhZ=bHjYuP$<(CB^!(>22gIbnpUK zcJ@ejqAJKqaNFQ*8qD^lfa9L7J z>(NWrTk6AKji}F(BVVLJms~B)#b|+bt)pvz;AsqaN;AA;gGe!`o36d%A)Ee= znOb`PD&zphcl@46&w}*K-E|aKjrV*sbx+#|;mF;(4C6gVdUdoK~Sic-&Jx@LI z`@j}r3BtjT##%Py~}(S)%TZXNOdhy01L``e(yfbqS1CkZ#*d4uf^dy_+h z`$TE~HF3)MdONvb0cKEcv0y32)-s653?xW+_ z9Nk$J&awGEF*cWZ!*NStMG>Wl>ew7JM2yWfkQlyU7@KjALq!qC<`|64KNe$izL#V3 zhu4kG;cb>)$L3M@BMmV&Cx?v9)_%w4@XZlBek|i;c1Gq1zPsOWbqVMlJYSq(W)fap*_z#=+zMq0Zy}MCm9> zOGu#F)UQC#Z$QU;j;^#StwnZi)pQ$jo@D#(Zjm!Dy}F3K?qC~k+Gwj@7&&U&;pT;b zEARZ4XBxCV-PI`cC&FCM<(Mw(GSa(#Jqz_C2+A_5a1iwNB5j#sulXHiDt+;RK8=C=5&FBQah+Txo}MYg^HjcxKy{>XPdG|TOZ zCC;Lla0WVTN{V7huLg2JwJ$0S+Vqp4Ri9uVSA6xQXxupwjW0FjQieI;^2QYl>t$+x zODU%G=B|w%Q(eWa%?qUz^E!`W!!ELA&BJjjVSr#b9g`N;RAu{??<6lMket6wQ`82D@KWX{=;|c+mwV3b+W9&u%m?2=972^ zCPk47iCw@mF+B4T1}Xj(>;qnEzc`wlgasx50l?CU`zY|<_O|RDx?pBtYI;7@N6F?(z z(g$OY*t=l+yQ4h^IxUmk#mY#|QIkCFrXVswb5|{}>r`At>8~{&NcrQ!+hU|rl%{E7 zc3?yLDBuE5Uc1(JbBrS}*xllbkI4|J>9{iKFMHD;zbbI}lA z%vz_6+}dfgK9={hOF#V8-Q_sKn~pL~+mHQpwkF44k9nk2N5@B~(d@vWIP`2A_Nyu# z-a)8S)bUJEHEP{9;!Ygg*MlbuSR~_PSi_kyLz9wSbFn8i6?;;XN0%tO_h6KA&sFxe z%)=cxa$r(YLEs?n%{eq>df?D=GXn2#&QZ1`@%|b)aPxCnfp@1AD{m&Gu^?infhYGBLvl9d;pd!ar2Vfa5x z|LJEM+jF0>D@E1&+ErxJX=h86@FbL8ZFt~jcid}v7>Bc*UkLO1ysqUKgh-V_v>hc1ES|S6Jp3718?r|wY$7LzI zTjao9r?P#C2u@U2VYhdWEYk{Z_$0*mT!>}t=R88)950NcX z$2?^Xy?^)?r*!qD+U36RXG~Lmc4^M9hW2_F&SKt0kUn(*NHQRzZxFL+bB) z-K{Dk)Z}B5Fzw}w?F*r4QEX?PcEQP5DZ@T_ioM)EawPstw$Bq+W(ujMz4ECg_R2E* zqT+>5l#ZpWfwGLN5C+xb83_6Be^ZEo-vkIODC@oicgp-bVDhe)vsUTAhY)InS`_St)NfBpEUhRe*%BXf{q~mm!Lm}zb0SWLV6ecDd%ZK zeC{7?hd*h?C%plW9enW2JNa4#lYA}F_{u@NXW>?5;EQyH#uv}{F9q!~@I|^r<0}pR z&w&1kfiKdzcp&C+-wG4wPTjFEah~6O5yC~@ky8Pa<;A@Uh;!UG!z7>3l@RaqlPIal z47W=W-S0#C4-h>f ze;KaU%fBL@i*Wn*@a}pceH#9(hfJjR73k05uh$FdPvOscIE47Xw2(f5zg{n-55k}I z(17^Opx=eRUN5A%=R$tA!z4fJHGXbK_>FLT(ZCPsTKE?tz2Crp9q5(tC(ZXGy$t?8 z1icyl8$dq`f70|P?b6bp3I8h4C5H4#JK@jw+YA2+(2v4je_zsb;LrD)0Dof8%!0rE zzNAOOpYMnLv!*eiQ{b<^FX@}{@O=ltQ4eHs4DAA3Gc zX3*G^3i3m`9sbOpAT$ms~q(6s0^RGetvk+i@3V)p+(jVhtJ9-Bu+fgk{w!;d< zW4kfON==L4R)%V#Zk9e&Rf}aF_jUJD5BOd0r6(-}& z*TS3QkPqDE8p4yFqlGWf!e4_f6w_OT@W8^6x}Ynir%(DU1}3I^5+?cCtC(_VK68*OTCi^e-T-blH;1uukDNHz(Hp65; zOhJ{Bujw|aDHU!Q1A=^#MpqR1BM9SJur(`83=hIYajG=NR_+CMV0?{*iTz#aG$Ih= zg#7(4+OY>$hlp1-yC3!ecwf2$>0H%EgZ*oy(SrEgvpWy}bDI58lv}%I-v|4D>+WjZ zituof;*dV$@=oh~&EAMMMx80TC&G?05q7@MB+c%Jxl6Mj@#B|Z^5YY$iH3oaVA&k@DKE_~AF@#xcaDUlg=bo&d zm%c41zN-2TUylt#;iK>KUBBHH^qy7x|Mc8RQ}@<@)PlXdMU~|xa^)iK&oRfsN^bBO z9I~)WX&{4%GR2;ok;2Qc$EedHdtUXl)DXEREp(mq06|SBH9SaF6-wWUgW^%}&h6{( z?&gb#d=QKquRV$pZnKI@%AXPly}^*!@?^-~9R>ILZm+5hHSa0+Qx({5EW~_DUR3E8 z*YAz<@VAt9S`=?uj&mhKgV4{wK#1>i9`^ zwe9w$KeY*ccn8AK#1IpFU`1QP2Kf@&)L*FH5?%j-j2NF;aqh$ZhXKq(gFiJ5YCb)V z9ct1&@788~{?;&a!w*B3M<@H!pSnRBdJ@RDs(jw!pStH(RxDof)ZEN(%LiUb{5Wp+ zxBuA}ABgG^iHJ1jK`XF);S-ueZ+z^4Uub!-eDz;{`=4u2m*h7S%rjmI24}69^(6Yl zo2fxqesk7fUeB`}oaPs4v5>692cH<8Qxa_j#&`Oe?9;I~rs56*>mwGp!(A2kQ<|va z4!<769mZ}>G^7*J(pVxH9=#CvHrHC_ldt;XqfMh3@&NSiPSD zL*`@<_jhOyzMD0^^Mh&qQQceVa*I8f?($Z#cy}YMT_L!?AKQE5dxPM6J@_6F!uMI5 z&i6bmFH=ZfjiQX6MqW$WxlhIZum?Nc`kfxiG7HX0=Xr-d@)`7uUPnt`?~6;@i1rU0 z)Q!c81lgB;Pjujxpp5ONv+I5F2kpx0I8S>N?^KBf+E6=DTX>Tf`b>iaKlTy!4@@#8E;^7AcQsHQ>1nq{;}q=xyHY)Xl0D*O zQ*vX0_G3dy1@F3ErefBz7d8TWbWk)Uh9@tWhXZ#u4u}}UAOS{eJ>;Y*0uciem1x`! z4PCYj=(pM9mZQIuKkgmW0f7hkh%>!bXiqY&4_wP!&5F$dT-QnUNQ<{k=OAu2B%5_U zTN?5N&nfBIkgwIjAMw-3BP4~8`Otk`dbYCdj{T7EF8hHa@G{D=;T~dz%*7bu@eM+X z;ozn|-L7%i8*XjYG`<_lfN3)=Pb5pcYFZDly~W0F_CFG9!4T29aSP`D zop{FK(*z!rE*nY5ca3z6}3z z(DUH0uhmG?pL9F?`Heh_bFCK8Sd;A3zL{G{e}<10&H%dqpqV&-c!1xskC7fu8&l7F zCuycfn)43ww+$xwTc`2oM)-|zd(prj=~|7yKf?c2&@17u^GAA_#$P`CH-LWDz#nPi ziZK77VUQ(&E;H~$`cXXOXAVsABWwH|KzcLamTlmN^i++XVMvcyBa;mLke;CNvmWuM zgU&GULpl);%j;&%1dfQ{516=3(Qw1ZKUiL*JMcXxe_oj659>-%pSL6YmvH+WYhb-T zNq-7|md^|D2gZo>2l(sdMfy1WMg76Q74%W~>-9q8aK!v>4|vAAJ@C&4{JqHUgwZLFhrzV4g8T#(D=It>5T+^vw=U-gEap3 zBYrCASOb5guMzJ9<+Td&CD50N4+5I)o%C7Fe>?oYgyRtg9o#x9$2i*rvi90kYzB9V7{c$Wkq@no|IzG}FF-yc!jrFD z&0Ym_vu2-+@Ve~d66^!SW0iIz?yCp`Qv5jY)$RXmu#Y#`R~ziaPtn60&opyYXdI2N z6B8Ic4Uz&KE=0p;HHOkw-w-G0fqHybLUR--AWu}N*W=)l<>Dt`EuLGcF1(Ei3tSN` zWGJeLF&t7XauqKYDH`1ozgKs$rWcFVP~H$jOF(+OtfI1V5zbuyJrGH-F2V0RpDWgn z72AnRGOKd#Q;U}b4;7=Xds|oI`yfenweBfj?Cm!PjwJ|3Q(sp@v?YGuW?ikvXI8_J$~P1U44Tzf@$`*uI?)h_Er8c4)wdP?kf#M_23b|{>~Nmm4>l+ zZbwSwM?cR?zoB?ohOFjeFflLcu_gv7e)R97DQF@3Hn<1787BpKUO=*64QzkmYGB*% z9E!AOGj@ZCvO)dy3T0~x&^6Y=-8UC^dEmSSPTKA&%vbgT5w9^WBJd9Oo7I^zZ{(}u zup1ml*$Z=ArSld%fQ#x&ODI1K_LuJ@j~X{o3$FH;CB=(=I=$Ro9x9XSt>1hbc@*{` z#JrBC-fw8~_ig&kHhg0^FJ#>fLBz)x@jLVz#^-Ok-dR1Lxr_a={GnLu16_E;G7yZlV{d?AnG`dh<4?wTxQH9Gz=PhD(zmD_ffh%7?uJrY|h@f0)INbgKxl&b0hWs%kSX>kHMBVA2 zbV9P%X6x8L`Z>8nL0_Y+=xk7Su|Si9gonsnUJ&wxS0Qs*A0l&^->b}JnUEDd-;1oM zDwtP5lU=+PBD+wLft|?fCqY?}r3c@-tY}0qtzT(2uzmFt%8Y!-Q0ke6BH)$@F5mUrkd4PhAaikE%yX^^KtUJ)OS zGhM(IQBj;CAZ3Y5&?)ojWQ^282H8NoPfAoE(SWYFE>9UCjB7)f~_#M=R zD;R|S8{<_I2E0x@YcYeP24yC3)aVad6E7M5BWO@ll;Ap@T|XZg#Q?B*#8dJ zC+TAmnLe`mqpQP4Z!uh%DOtXTy=hY)`g=ye8uNH5j=Ps9It z&`S*dq@8&1J$65+h5H)e9)(+xAsp%Hc;XR`>uZL``dH*U8FGb0xS=fv%YigrNrdlD zPC$H4$_ZG8s0$${_!{PL&EAN9B4i1W2Xw%mr@5~|nao2TloQ~cSWUtC?Z0XETsSV* z>}z1AXm-vK_&$s~5$0btdmY06O0$0f6J;&Zg(2>EVIKVb9*=IHWUy1lpu6+Dgl-qB z-jLDbdO1KyfE&mHLPGW?4+sg;8wXgG7nVb{7bgm?mkNZ$$2wgLd!1Y$BqUQUUfNrJ zOoKlE|E=%Gjlb&$f;@98$p7HtH&W>mJeV2904bljv*xx#(uQc?sz_@|(cwkBK zlJa??c?-Jd8GydhKu`}J@#}AW&osV38HSbzia7Y|Z=F(ux=clA59)*QE`9&{HAR1V z!@H3N$H5(18hYl&esZ%?B$=GcoKk0|`A^Val#-#r*$iFB)nI?wvp zgElhF({2`fq(R(O=uE3|UhzfNGTuUk$Uzyh6}yWo5R2$mOocPnz?H|Li=n1vNq|OX zoVxpm{L8DRow^V{9NL7#nRd614)zTF84}&N-eg`ouvexcK@~a z9#4nlq29gwIrg$YYd>{iK=9r9p49QR0IRLRwF+f=w4J9bZZF{t%XsGs?CF-E{$U!+ zoPr+kBB?sZo?n|)G@UQcRz8<5^jK*WXKX!}sS> z^m-ax*%iwxKB$Or=iy$_IdygyQ0>nniFI0SZEo%LkN)tAx|<#Rqu%!hb#K!v&f1)L6-k4n00aWvD6a0Kfd025K%?5%sO_)6=U(6$Tr7#-i`H$4lb_A?p!THUBV2Kvv!RQf z4oz$c8p!K?=ls)~p^F|BzcH%Q5{8m(-jyA3a?pl>zl65reJeX8M_6k_XRK6r-elb_ zFUQ|Q&>$>3vnzW%kQS}xsLsSNY2=^_$&zV8S>6!W{jNN3hQL9{@!O^o&o{>(n@DMG zj^7$vqHIlv9{!_c(B#<+SsOneNP(FfT8oy)I^4d)+Wwd)*@g+w1P5cFtDll<`Jnwn(Crax9|Mm$@)k=EO4- zxcye3#4STE=FTBzmgA{2QE1EMi0MTAMj<7b1#v)t&H##`U1FPL%|o+@ExsUq!~1QR zjhq@Q@Bpd(-QhLamqIq?4Ps#~LmS(VKKHt8s+UHVKH-s%`b!$6L2Q9Ew*%KN;Uor=k}7XO27lZ zDH--sXQ^E-D=BksFa4_2tZ~z=54@}~4w#SROqIC(5-6eQO;*7{GW3dvmp*ay!Yvw3 z;)~u0jhk97UxlatY^h}M{JNE&ryFqp6Q;RJRSAt!qtLj4xUFn-Mp#a zuB@)qY`m%APWM~HC@8*RT}!kRQ(0Xbh4e0~D>Fn2=IDB25OruXy@4y^y?UCT^^mDK zD%I3R22-1^rS?^boNMN#-v~|Fc%&8!eQJ|^2kJ5+SeFQIe!x1|Sl~@~+k&%5iI0TU-{-ycx0cQl>wF-!tvc_t5`!0g{f?vls)msMUgA=s z3)Mb9GOhv$fWWyfBz85mG|hoJ-2Rjihgz{y8xUHL(NRiNdW|nhV1g5+qTvZk=LX57 zm~kuB?HdsyjjfioJ+R%D0OSxLbP_M}Vfg_W=mHznFY~Q>|aYg=-GVl8C*Bce6i zpOgY@X0%1_m;g6BX~p>n6I(?M#;qERd%;#<-&*ozNUNM%GS|7a^vhBe{aDqL4!vi} zaOM!Y>l1@#xdaySag=Y{s>Vp%Q#N$iejw^4U}qWymnF!-}tEfk-wzjBWTT^^ABxc3;4)i0lKPj z1?pt)6DxeTA5?qA^F@Ixtw08K04HUZ{0Pe)=gv4Q`s^ag9A%$65OrWE`%x(S$k)Pw z@rQE9jZBS6HRolC`CE6dfZTKiusF^ahht2@Y{{&!LDht7~R zhXwn#FA0SGgKLA<_6P@4M{V}kmd?4P4Kr^O%rqR9()3u zP^6iNG!wKm9hdiud6|A*^Q3>hBu<)MzAKpCqgs0V?hj4xCXwEy3&5_upuV@`a@kK2 zDhe3U%~x|j$uk{Bo2Y|s{V=Js#PsK@15!20NgZj0KI@jRBm@ifUQnl>Vb+Izr(Xk0S$~?izdlK*k3FkeHDt>^tZ?4CT(Sn&y=!_9x3^8NG zm^Q!0cWd;D^YN1X3DzNIb#mDgpZTj$x30#|Flv=9%=ZojszAbT*JIQw@Fu>E8sC`b zz4Z}}wftsrgv1CN$59k1rkOE=Q%6@5*K!H!cvf*f0$&()4%|J;%{`xwu^8=S<8+L} zBa8WcX)Q+E*~nJI(T$^={#9X0Hnbn{I}khxocq0`k8rYpy(SzP(OpdW&Nx&>ZquaIJ`HRX(^E_SCpeE9^(3zEnQ^`Gu=*RD7u%8I=p1iZ5X| zbv|o$pnY3_DuDIDW32&O^tC{^7!fI5SzTFBDQ;H@tOvG2eOzOEX#&rH;N-G9JMeOP zmJV3DTS(RmRc4gTVvoZ!6?#t4F zFfa)S18E+g8At=_ic6Kfob<24tYrMKlm41!B95K(KikR~$i3bPub=dL>WF7?i#)?S zv5ja!^Ofz;px?IEscdh-SrlJ%;2@CT4z|n)?DxehyOV&w(bBBgT4RAx#+9B^G5>Lf zvipy`JCXM$0n;iQ~QULmbHg*mvR!@fD~Bwm^rYnunzB&<+sG#)Nb1d zB#*S)4nv8Ru_DIUlebUY2N&3oR3!jfRA96@aix*O%tJXcAXa?)Q{m+hT|GFoGw?wx#s z*bWs+1365|^U2lG!$0qk z?p@X)WuxqEL`gwi*zfh;^g1vM9?K03E-Y0V9>aRiJsn62GEV$V3;g=I+(1*|6TqF} z`Vg(kEeD!5XL~1%mVv&I7x?vKrOM97!UMkvA}`42g5}xqO0`qj?JGu`n5*n+Nm0_= z7-t{P3cSBo4ouzy1O@PW^K%72ZvocBS_|-4<^xxyAn?yXU1)kNS4rDL><85GlyGI& zb2)**d(xDeLQCL#g<(p~6pvynYHZIg0LBEKJYqYDdc6NM+S5H!N{KSNdRMFd_A>&% z23kwg+I+mjF`S`a{(~GPq7d_hwN~8nsmJwn-CcbkuH)0LGiM705eMiS6$SmHxee2QfEw7{Sw zyutj4z~m{@zOlPh!(&|1NM*R2 zbxK^1`N}`-30Jl}hc=KjEieh#JG<86{cHLDVXVWSNyC2(43A^A((tQ+m2agftK2Kw zBj?jcuhn}+IiZY13(sa5%?y)eV0V-#5qo6Z%nJ0KCks$U1y~0bptcH7OT_Sym2HLK znCnE0B-baP1hcbPO1b&;=NwMXRLTlmAZot3>`M{T0pZ z_jSG`k@rw1bN^r=XV_9D`c67;nIa;QVO+)iwVA^>yTN!2?Hhha*6q2{-h3Q5N$LOL z8@#}x?3w}{x};0(U!4FN(IlV|rD4QOV7Q0~=31qwysXb0qMWf?31; zW@na@yz1kr&hL?hdTF6HZ)0hJb9|?^qI8I3nX;C+GaP5<0(%DdGw3<*0?FlII=(Ax z4Je_pDAjj;z>O-Lt5|&Iz_@gbKS0GYr?btnXPNMQ%K`rwqmq&_9+`nl6rosxW5^?C z*tf3+_Wtj&qGy|f=U`^AwcexOCVUK9Mx=3DRAA!Td5YPW9hlr=b!Ma0T9am=y#mDw zBjY>iGf>~Mvcp|~KANp;BZqtV<%`7_jW^xa)PA(UqNEj~ePV>NpxsWKVhK#Z%{{x~ zFiPReKG2K4q#Ze1_oj#UU1rT&QvP&l>S6-PjQV?n z#%Pg+w82<$q8i7Pd-O70*KorDc_iO4T%>02@qotW*lEYwQn}FZro`>J)p%*o-nMuiHr^KDQLe zHAJRH4#f*g0A{l={h885m1Cu{MdjcJoas?z-N6vCmw19lBN`75$d)gfS5Yd;Ax9{J z3u`xa&OG6-qv!OJfTru+cM6MDsBS$8bu(@p07Cd{f?14>Kkn6y!a)-LqHxG!pf~`D zvkY*X%<~v9b6`dflnyjw-xF9kO@rVTF;Ln`8ow>1&G0Y5e&j4*g~WsY#wP6~O@GqY zY|?>yK#zvM4fG}WlcqoE&uxF~cfKj$=71|9|OG`{yLwe zU&KQ`C&472BVdxxGTfs;zEXi5Qh|dkxH}=pC+SIe$max@jNxzSWd>({J zKDQ%0`HDwAd*QYf;dMSq{}TSJ=Xa6bF3=m{uh%>2SK-fkehL1&LD#`wuXoZT;m`Ul z8-R0Opi|(lw?ooH@sOV(Fv$-9RRljQ7c1O=j}qjEv>*3lF#ku99syb|!C&WxG%#5N zKX<`D0`x`r>->=Z9RAFIKm5<)AjYTg*ZCoR3=jD^3X}XaB0S5(g7@1Gx7`MQNbk`2 zL3?l72YQ=E@Wse(y<9@Y4n1Aa>2 zHpjpZ>Dd}TIHb_z1YKm{hxBxfpML{Cb3w}nen^ki_;DhBCg?N+Kcww=$WJ0n@?+Kb z*$sYdaI+ZrAuVbA%tm^#pudjpt}oL5Xtlo5;U5pW3;ue2kvNpFXL4dQ^hD!4ss;D_{5 zjh~H3uLkrI13#pzG=6}o-?S3+d;>qEXKDPT4w0JXfSzIChxBD&osqv~@c#w}YH+_x zkYCal@o>Cqg~{;>*m0s3z5XLu)5#mKW)d&A90a;izj&bBSiohRJd)g2{5E-Y@(8)8CVtpd&2w ze)VyYH1&S}gnFwVDm6i8SQ-yKUee5m^jP?R4ElNa=Ymd!KWX}t9)gGYcVHsHe7!K4 z?`fQSWj?2o@0W1nIbuCu(x1YA6Vf?|ba4h*==+jpx}=Z8|L36JgnujOqlizM{-hi6 zWFeoGnmHAw1GHVEFCif5^Dr6iQ<&uM4=~B!AuR66k00qDh1-6dFV*=Yy$}B1Lw*n3 z0&F?ZjqoRp-wfH}K>cR<_3znw@>Vm3Evl#h4*o)$CTx;Rc7R?lz=#hi1>f zd~cd&Z-m{c*`3JebF+F@)s8lJcbIC=M}7}zcHW5uEHrVRH5Fk-Y3{pWe+c>VoNEof z+t5W8_M>@~2%D$;==d9=Kipln{&?9H&x(!#8PIYM)ewgHgJfDS0#Xj13cK(=VFG2V#ntc`QPipCm0S`Mg`wrB}QP>eo{I-GC?QXc} z_KSuv)Zf1W9W3~@n@Cp8*WTbFSm3d7OXv(2zBDg zX#wpP%oi>~H&ZVP&^e_Gmy|A=SvGA^@zcii_>$Sihz}scO5DAql_Fj`#04?B*VV>w zy|^N*zK}MCyv_~b9(Za|8A|`bQe2y5WRMK>;e}W~T3otF$50bRhTzw^AsjEcDqoBR z{_LMtb=NQg_wGTy%PUY|J-F`al0*D9L)rbPsszAs!3aHp+%(?A6m9RP#OL2vd!v_I94d}(-p-42Fmx-LL>CMbiMWo3&?1c}=LG#K2}wrhwAw;7d-+{NOevXBIN z=NqkHMrrvIE+89-u4{N#cy-6=>E2y7#!L_)Z(&IlLHyKVz`&UyF=PE|cc1klIAR|( z#Lv-T1$#IeQ3Q=1A??qQjutA|3=Quk+O*!E4DLM>GkEk!>pSBTj=wY0pa(84$SW)7 zd?SrNPK9*3KRxgpq@gDPK5ncB-d7q}I*K3Xto`X%^pyspdPE{3jT_?%Zx`1?2zK^6PK_EVHwwk7w23N^>7_7A*Q~<9m#*^pULjPskpDj zxqMv@d`B|R1%v}15T{|G#a%J){Jd0I)&1uA@;Es{W<1`6)e6n;r;{y0^LspEjE39i zh;!7R>1my3m(`Q$(qTu}ERkwoIDzV^Q2qRtL&L3e*-RMw1K8H%^JO6XA6DA(fzel6*FRcm?KL-JZG@+w1KB?@ufuv>BmHJ+*c zj9u#Mr^p%g`ywKob%UyLqzJp$J0&wDRn!pqXUFC%2_MC#Oz~FQz zPC3*;S34VLNs0HC4GcMlQZvA=Y`v{m?5QzcH=-Ny<;W}3a|G&e0;5{s&~d*{=NUVh z(cJm!8`sS+=KUj8kPX@Np?zFczOY;A_=lLFa}C6`LmWC;CQS4dcLq!>#oW+^Jx~C5 zJ9LFd!VUVDJ4xfWh4jtve+zUq{8K;=f|mKlE!Zf>0@}v-%*(4?;V6EKhQyLItaJD2(R-;dKdi3j}QLu zg5C~)oj=lB;ZJ_Bc5K=YdK3J0{z%tq{A5D6whr`413#oIH2+!fUj*7^@FzVB57w~m zd@bD52sZ<6*@keWAy0z1S=F6oc}pdBK!s!!jtAW$nbc$HtG{&>pl2W?!dHI zW|TEdM1&U2&h_)3HTwqG70n)t@UvkT>uQ+r5_T9;rDpfQOw#NaW`k?*F|hwabN>V; z%Zc&%172XzzQ|!3s8+g^(f1 zC-bX1G!Vwef60puyb~rGv4;kK{mri!pTCLxkQ;s=Jv!On{OSg2=t=ZDzv?RujXg2v z=x=`2R~lf#_%1iZ*e7b5+-qXIOvoTDdSuPK9VWx*nym~s z6whpgg$Pn|VPL93=VrAO;o*<-DLx#V5KM}|^IdgwJn70da zEXn@E@?YTl{0m=1+NhEpWvTKCpv554fkb8M8Ic*-|u2 z=c5Ym>GZphTG|2ENB&IcGEDSbn3q~2*^TMq46csjeEE5C8nlo3*=1+Qnf3BXCMOf;v(-vp&u>MCPgWs8fy5_AFC6 z@OQ5A)VzK3%#An$+%-neq3c)bDgLgRAvvfR&iTjzCyvy+G`n_-d-r0*y?ds^x^|{G zao=_N|MK=V@KF`#-sfyKVaW$Bh!!#8318h{hzmwaDca2vP6F}~Fcq}4Y#_niu$#mr zT2R`%Mx@AxcR`?mDh*V<0mUYkdc`jyMXwjZCRVvf)SKQ~8(@anVDxk&YYQNp7F@~%<@M%$A1*|&9i37Spmlp<~(=JFTYTplSQ6w zk-sg?D$?@2B9_7znofV$FZ-pS*>CQ^+0k&!esffWiOqxkT5dC9yndten%j@pUNJX) z1H4}EXTSMLaW0_$Jb1sb-(24TJI4L&H#g=Rl9{Hb_2+qgC4&hP&WUVBTA^6JU48N$ z)bm{x<8|&<@PM7~U-aX3K=AT|S4qEocL)vo{`p=g@?C&@59yb0TP&^hdRo`@ORG_& zH3?~DiF;`IEz|cLSUm1~)+`~ti~AIpFRxqvesq}fel*oZ&HeYIIjt_(lzu;&@1X{N zPI&Sy@8ite`_WmFCsLQP1iDb~;-sn?p0qqKJb69s+sz42Ipc!vlpET=uAcoVZfJKw z^9*{swbwk@J`}zC^5O4cU{C;F=#%E^8$h<7br`f2?edt`t+1_R#2t3h94`$PrWnuGv-ze(Sg*$2fQdW{ zhjU%is5$)Fsc(&nr%n7?NpUP|E3RAC7C@T68dv%#^bn~H_$a=AsI$DiJ#HNIQpazH z#w&F$^Kf#EI+)ZQT!wmcUH%z3ya}#iPYzPJDL%q9^oS;Gs07$lfDoJ1f2U^h(B@TwD8T}Q+w*6HTvxA z3~1M7M(VDC9^`Ctscuh7tZq*fU#Hp^U)F3nGCGB|SdA~iP2m4V$+{Bq5gc(BBK5Xa zq)FXjX!E5E0zXO!H*Vr~zQo}dvIov`Y3KJ3p>5f(Grk~g&6d(WIIJO5ErLt`{04n6ph@$Zy0 zMGK&VIvHhH*h=Y#N_a~!&O6V>X=L<}Nl9a&*@(J;p60W&p(z^1pvP?gCAD2=&17 zKZH6#YsS<2HUAKJu|7huKR^6y*c7`pHn0AF`Y9hv4PEx#T6WP>r;I)!H? z=7(=#5{B={0Qb@`4-13<@%zX$Zem>aGKy&8B0 z=)_4UUJ5$rpEl4}1NVZi&uMoNFTjIs>%bfxPDOamH9HXA4Zq0eCaoLK&dpN2jJ(|6&nz_Xap zehj*iAL8%hVSc!l%>2BL@RZM=!S5~j9YT0RUc_Gko${Fmen)`60J59PH@hpYAcJqdp6;1@LIk9avA=Fbnv{N17FZ!W?wf!}SW{1M06gvj4- zK>soDIi~y(pQ-0B19T7Y98>;?L!U&*D+>B#;Ls0c8H3MtIiWKfr%K{OS_q+&0hzxj)}kn%2Jn~Qhc&yH zyojF#o$?tBet$=&4ufvUi+CI8tj~uL|4ZQi1G+I@5I+Js>&t`qO~79V-Kam}PwVub zf&MJ;Iuo6E6`rBUXNexJ5#h?=S7ZuD+=B<7tHM4V!*h*|=?sOQv9ZQxq-(6PF+9Ix zQOt|3u}uS!Yix{*x)5t@H5g}Z)!lZC$9L-PHn{KB-76rIdEm`8Hk65J#MaoB>+VKC zuHi9E6#`s=hwfJNgLd8D0XOqYf3TEXx_cJjR^2@m@!r+l)B&OWFovhThpfA+z~^Cv z0V;lwQOs>#tIIU`KVWj-gos95v62>hf1ST<7bAVes$DG1g%<5%#J(wE$u7Heskf{` z>>yuY)h-qfi*}}veb?=<8ygE3)%E>Os?#1&_my>}`MSU>d!gT68_WfPT{@q&e z;P_gl^Dtr~Yq8(O)*v58dR~NDjRA>w*O}KKS>1e`c%VBC6LS~;)qsd$@Vp<^3Uj%? zCo6M54c*mq?i|k48TQF&+bFy14zWg*n6?6zVsxuQ^Wwd;x{tXIM{U91cOT8C1)x89 z^14HVYYTtheI_kV`BR~?!~v^Yu!R&n3|m`=qpo1jxg!x-b*P0!uy=-?;mZbd<*2rZ zJIOC$SGecg3lU`*;d2oM>zzI4o{e|}d?wN=;ND2>QrJV9fgR*i)`xn|?T#qL47U^9 zj>+WKTD&rc`^yDEtU*O;1@+-bcGr*RgKB9lx;JMvtVS%s=~h?Q%d!Rbt{BS$>p9lW zRnp2F*Jqc(RW1Q0l5=^aRpiJYIUEg1w7MguNh4QBH-P_=NW5yn`t6S+@4%wSum-to z#sMkq)n$jHTk;h(yv!o(q`{h7cZ)~X))Tue+InL5_5D`p49i55v7$IB@{qUrRH9fz z)xMpr-f7;MzAbKR^IG2nZY$~vmIakZ+{5tI{E%;hu$4|*gTl5T!X|nV_F$g(0k^Hm z2sguPgcGq3YU`k|g`x~^xV-F!1JbBJE^CZ#vA=?Mw zX7;{V>oeNW@s5|95wSPAwHJLE|Y z?;3Y^%ZX^#dDMCnb!vXPS5Chy7I$(3PM;&4ogE4+Dn^?@o%FE#Y>P{kQ7@a3S`PR> z444PFj;RB#0n7rd2Am4`Gr-A!_X5rWya#Y0UN zu@dbOzCGs_0fq!M%S6o=zPNi3(2tM6#3onQzsnL^1LDKliRRxbDb$6~EM81{#jx!b zgndBT^2h$iCBYuuD$2n{`Tfmvfcx<@#u0jQEi0Z z;pGb2&+`Xi2XRa-TF@BO%+7ZCM#cLeT2TGVv~#Jo?d-7qYGb`=_d!~A(DE@lmX90t zeC$eNee~vI?xzn4n;{j*NqM_;P=f7Bxv)If1(*#O1iT-x5%5(&sRZ;TpaW(D(!vnO z)JEX0Qpo}9eHdlYKcil|ls*EsfXZc?im+WD%0eb`FzQuS<`iOFN}hoK;}~L$)wMi1x9d-rBfrV6u1y002fDh(4?5blm?O&|`HQ$u|DN+%j^&HEzqz{p zH4c7puuGR_+59E!DkityhyV6Qc`q$0COk4=Q)8*CYrP01ZMrY#!P8c`=UjK#Rh-ES=kZdnH3ioAbJ_U2{J z*yeO~w@XHEi)U-W?#hdI0rqL-f2?q{y1K{PjgZ-T$W3?Mm&33ta#rRXgS}Q)*S`(9 z93hKhAy?`l?>sN$o*~@-dFM>exwp@-ZmWeHT1)HPS3nL9A%`i=3d()xOnj$Pwm4Xl zEZOE|3w!>|UzRDV1?|t({qtCAJN48)JMXRefhfUiv5+V9kbfxbUxF7!33kV%^6#S6 zySkp}7jo{WAEFK6_ED6e;!JOSvK&Fwr)&Bslw(r!i739j9l5AcDKqupU%b-z+nQLL z3(q+4zu*ktB`i_?nffxNaQ~fkWu8Jsefmz$m9&`w?H85Aa{hBY=U4PAqpRybhTH_% z?~jE%riVN;uWuRWe)Vh@n(!?o6hqW{X)+D^kX57 zFzl(FKFzlM0QP2w;s#b&yE^Uax?C<1d&^iJ+PX5wvZX!%4ZqV)@&0}LbR70)*#UkLMOD^Abto^Y3CFM9l4maTEyR_0i@)FHiPpmK(>ARKmumGVXZNjX!^+)A z)QWOiIyloSrB!nln8r7S_P(sHrzPcg@g}NuU)99^cbzEzO``8vPg9l_AC&Yc{70I3f4u1%czT=Pt$UHcUu2)O%S+p28^O z;(Q46Y0QS^VNN(ks?RlML!1Xwi$j}NCLZ8BmEUw8yo&}mdyoTHceT*nxHo6Lcd%C) zS(8iOhkUf-8gkikU0vl)Ljt??(WG)PaxC}GmN3r{5;)n0yPn$E-`9w?=Pg}(z*0xq zztvXfA6Y7U-xNK=YjP*BKDv@)Y22)*p?w?nrZM-^v0@ymLmE%EQKoC^Q_8IBz6Q%P zp3>R_PLdE!t|(K9dPv#ZklPC<%4OI zn{HC({9x8BX$DVnl@|Jy=@k`a6;qUHw69{=LMbY)#NB*2h*YF#Tr`_2Kk@qfnpKrD ze-SLO6ocyX`xS2?!ZC$PrLd|>=pZ5&^gznYjFNVfA{@e^i?@)LQ~bF14|ZG%i;9p+ zmDg9Pu~4eYbW8}S*QN`Nz#y=KdyNW}%3|DmhiJY)ai)}JPU`EWPzY|`;tDNOnIe&; znw=Rv3FN{^g$Za9#i6q0#YIv9Gh0@!w+_QV4a~w636T^oEB3EcitetUGz&q7guo69 zzvMz~O-H&?R?!>cuDgpXR%R;scURF6O(pEoAWEeI)kW3)UN&X??Te6|&j0 zvngZ8DoYGRnif+Kra2#@!wB|TXbLk^(%TC{S3yFRx3W7qL_^HbdP=%9O>45cwIj4w zhCv%DtWthbSP8>KqQ|g%u}`75YF)}PUzkUN_fLH2n}NcWONzgrE*cdxsV9t01nsUA zH?pH8+&@L~yvR@i`%0!H`xmB{Wri48`ZLBlrf9JLWJ&sou2e<#-hM22;Ak z*Xrpe?ti zN9*a9BVF2yqD?5Hyu>Y_Z-Bh3u}7T%{7cwUB2IY_Z%dJ+V&vlmKzv099@X(`*kF1b zZkVrVSOW+fPkV?n9&y@XV)&VWERPB(%7b{6+ue}=6!>K#o*_r#<3N8I_3?Au(KZqI zSkQ@+FY%F}GyfH!PX?X}x=|kDu=OPP{|fx=z^x|!#BsRizH?iO>BK+A=Fn{@&xblZ4mcC|TY&Qb-_YTsfGl?nAj`c5d|A#> zsD};k3xcmvZsMyzXE|?#PR?rJD?m5OO}q+pmQw+J9q>}njdBxTr1PH*{!4)0X5vqL zKInr{j^CnOcL1LQI&qeZ_)O5xVuO7H=pNuXpc5yZxKro<6Y!r5Jj2AFxC8X(5k83c zS-?kwPMqiPL+n12z)4)TZ8*(JRO6Pwa_^$@O!o;6= z73eDR4ckWzLEz<}6K6Sy`#~QC{4vmBze-vLI&sp8Pr<|fG!gI)K-erf;7Nphd!&X8 z_>Dk#;ypdmF5<)SupbQtTmYC1NVy~c&Ijy9*aE;qfO7z!2b>A`4B!mFg@8;iACT#} zVH1k{vF+S26L2bQLJ?>Fh)>4D^c;Yc`)EMQeF)-F&eVY$2ESy)GvrR(2KwKj)B}^m z4R+vG(20{TaS8Ol0DlwoD}lq-)E?rb6GuG3|5fns7zmvl&<*~?KLnli_(zO$9|J!L zx>2vhkAu#7d*-2B){|Aw#}j=2!S74h?lR;^{Bzj$qTK!+?b8Ch8+1dC z#JfPJ+;)R*10Dw5kR$Pvpp)Mpz`qrH-0zt96K?{2KN{Bwl;Z^Oqo5OKIf%aj`o95x z4fGFzqaW=dPCD^tbpD@#|8u}$8#0!E;!lEJfbcsJ|5@P3=N{sWPkbln-v>@P?+0E3 zI&sp8V|){GTmi^_vk;K-D*&YY+lMM;*&wAyjFt03wRdjhWv;-L8rWm zKv#i}1Kp4x@nJguP2fKQ_z)9+;)6i{A>wBv{*}NJK_|}q6HfqrHt_MFrvjHiCr&!? zFl>;qeqIEB+B#~34KkztiGKw8XHe>hNBpzETR|tz_{84_{m;PLQU6`QVW({mangxD zji(TDqP?_R0fT_^04o3~PZe+x;6(7L!F+Kc#eAZ@0pfO&w^0mlKl0TsY(KvN7BK~2#bRY=$ zFzC=LmQKb?dx(=x{0Qj7fMyU-c0L@C?K}bD*)Dd`wkrHA2ye6#;$Om6+%(kt zjj$z}2>f%{iX+bSh!*Og99`bbp3;OeY=j*1+#x z#52+*eh=u0;DdK-VR6|bB28m@`e7ng!%Fw;!Kx#5uRHRZV})tKh6Q|BO`71i4UO4k-*KwN;sTjm?Q7AYO zp4DL+;4Yvsz@QFG0E^%cU2P#J=wwSS;Lx=e_2mL&ePuv5n)P!Z zY>sBZ54xSP`XUZp>jSi}I|nu{oxl~)iBk^5Q$ha`@Na_-y=@8l)_aJPPCSH4V*9{( zd6C`<=mImn>k&Q(Kj@go(jyLCWsx4f`@~(`e$b8dXip61=0$ofh!4GI3Hr*h^oYCg zEJS+LLH+^YXu#Qk&^eZV1Slc?QMg}1J4gnE!p0ur%rEga=;%_<4BrF|9q{}JbmF8F zZ^c7?CjiOs2*TGQ-cj&tg5T>1PaMBp#1G+Nc-jUa+^fUgI^3bd%{s*RBf_l)%t!cD z;J*d@pd;N-4ZjuOPaMBp#H;YkML3Kb0**#_eqY}K8<6ARry#uXy-j=&9v8wp0l~(K z@k&644iR7ALv?7^VX_YK3KDb=;1WFOi&EAA=8qJNxw_j5_Z;2L{1)o&TDZ$~H|72> zx|@CRA-eH!Tzg#i=NR}q-OcgxKXf<8)^~L`$Kj84H^=OAx|{Rf6l9Be85&o0} z-x&;33&G{-k><_uG2hCd7SOch|s;a}Riu< z$JrX;E`WQe?w$oV&t@|W+f6|C_rU+K?wh8zk=6MjN>Xyj5hgCFuB`J?&nS6<4tbN4Pt!mH-(=J z`564)GKJr03Nzc3w^CD>@h1P5O>(=<6!%e+`=BYU%h3;wbgwY+Of&h%ncS@=KL0Se zIsO}b0w%Z6_~$D5`Nsy9+9ci}kYu8Uj6h!|I@Vcj;0x%C4v=T&V}jE3EV) zNbI7YO)ae6VZ|_M@<0#AsX`k0k^*q8auEFL3C9*+PikrTSPA^t8mTli6}5 zW6Z)%mXVgY$-yu>Na7Dlxe~4Osqz*2XK>|OGj^$$%0TpD8K@{Rk?Gh3BmA{7<-C9|!kX<->H_KSg;4sAshM4WFQ$tMxwX8wxTwHe zQC#W8PNzA-S5Oi6R)2AEc>y*hFBtbLsE8Z0A$hC64E9`%?ZS%@%rV@)Ld{N~UiKKP zJ_K`&{NjpA>;@N?F72%VNH-SoLUhFMV-!^wh&yFhDX>e@yI<-=XjSQ%$jvN;y_ z$~n8JD5rQ?;obh;4Cx&u76(CMnKjY$_BNvw7CnW@$?S?H+{d4WJ(vYPf6>yyiXwM0 z_PNCwo{JI1v6~AJ^I>eK%zsbu#UdN@i^j)R?pHG~0$hy4t;OYqP)fLH4h*_>aELVo zK^X-%$w_oFki@Pcg~|?zDl!HdqGqxPXR=MIbJn`CJ|^VfT`Bs!!Mk_cEmmuqIaFP; zqRAQqNX#m#PW(Y>6}n%cXcJ;o$tmVm*W4u~F=pB>W}gxmLz&k8jB@o0DDsEQ^=_;7 zV`-GCPryE&8ppl`WPl6#_uKwH?IXvWdWkFSmY0Ip~;19SnDG zBQOW5RLd&*6b2m_oH)+2GGekIV!T4g6Rkt%NK9)B+M6!h|C7R%y%uOqFEdfDzOThX ztwUn4nSK|nt9rE;pn>uwu%Mz)j1B$!w>~6Di*<+5+j>2W-V^f?T|I^wox_}JK}BIH z8zKc(WHd~}YHuZ*d8~f4SC6o2TvonP6s;0dii_JTy~sJZNfW;_2}ZQ=i=Bg;hMipK zj`Z5nBH#Y!;V|71=eZ?Co4X9fJoZ9A&Y_nnH|EKruOwpV&F9{gtGkKenOIuCa-9*7#mBYu}U4@Vvk zVV>Jx9_H%1)LAy(F@veNRD}94$HUY(_8S8i%ftmu{?hRfABMd_LdF}0Cj)pY;3|9% zw_)zfYRbpMAH(n=2g-@xco+LQz{i+Fo5N5~aQrDL<-vMa_vXB0YAV~})o6~Qo`_08 zJ~#~#goUMu33^Lw8|s!*WAT54&x66b<<{-bpOIzP*`Ei~)Oct`8u!vRA9RS2 zZ$-wICAWJ06QOr_i*Eun{OW`|Nw}X2NSSAwmz7DGH#OnB!7!XMSaH@@>yB%JZfnE> zeRzj@{8Y+QJ?HjD63@((>z5|VwWzr61Z<@73~Bg1p2vxA}Qva#5t-o6tE_=U^8cPB&X?o9VVuT%e4M)HUGDRIM~7Tg_LSqe0KHJ70|k^Iwgw#@*CIdM2n+W*5#WO_j0{Ix(`W z?70S>PW+qi36%WC66$Z`9zh3XG3?-L(bYl9y;mlun^BkXXJ6LzbFD(7y{*II$UtqW zzm>*c*;MYUbEh7x$N%_dEv~bq=iFmG=gaq0^JT5QAvRnfM5I}>`}G||UR_1Hrt6M= z`u;nGymsSEU9GS~#rC_e(;2%*y1m-^S>(v-`UlisweMZ`%l7!aEm5Zjw@U7%W!5=O zzl3eK>~L!AajmIxV0r}m1gy%&Tfg??6f0ATSL6#S=cp##TeYq{FoD(#N%6n z5qrHfx*lh%M(0zCi#nnQerMd_+_bgbk|_0D^?}@aUF2%CUY>1ph3!fEJB|t4uqO|0 zZBI*-BFQPB%MZd$n=^8j)4SUJPD=|;)LFL0g>ZLz?F*gqWsO~{f=1qFH%VjT&rmFKKGgHMxfiO>XLO zH$`p1*Ts3EN84qG^&m_AV^Q`k0_SOy+rHFvz5mjpoesPiXCqO6L7eNe&x?-Dm&T85 zI#qVpiw@{VOJ{G2qP-+K)KGicxcwcC|7g$oV^>Erb*g*c1=Y~vUL(#luZI>l4p)1vAFVZH@^ z3fVa&j=`Fv)qeydw$JNzX zfKeBx2c*o=-qGGGFrI5^S0imJM#ou#`>L=e6^(;7qMyQut_(Mi=iacZtI4j9=UpT8 z(;1)l)As*?7@y{cG5&|8H0iATd`!0SYjCz;9de%|BzX^Ro%aXXYNrbP0pXq${#AP+ ztgj8mh|wtSQ4Myj559nLKfWm+VaFn@boLiPwi6{htU=1SwyCvjMC;hHn;R_q94e(X zG|cyEwAm%j>I~^&?CY9NMpsF#ccL}h(T40id%oJ#Z{hoD<+Z;_BKW z8T?+lT;umjzjFnyuA6w4tLw#>l;6`sZozp9#EG4_oBL^P1t;|?QGL)5(zl%rfr+!bp+KcGwe6N@4vr))OLPkdG0GKiwGxJpzRG{BjtI2Hlb zVSV|M0`6rd-C0p~ce!y4L|L^8`rfR_8I?v}93n(aG5YRGqy7bRW>zE)1@l5hV+K=k z&{kgNE3U|dcDw#5JHM=~%G50ScsVDV!=;aW{Zx`_>^mg9B zN7G^GrAoj*1)VtQ#Lt5ME8tr}PXK-zbmF8FKLI-Vm4H9>q~131C;k@b)EC4)Rl{-M zM?fde_{3ia{U6BiHK4x_yb*Nbq!Xv!75Q%gf9grqnfMcb9Q20}{ypq7KMlMVbmELp z{87;F0{$ZC)Wg~aI&sp8SL^&=0snQte`exO{9e#igntR~*8slH;*&t9Jem+6 zy7au8Bqkr?8F-NG0ClG*rzk$wnV*lK*Ti*#M(}NeUn}&Qh?6hzLwK%6xaR>;{6HNb z`WASl7#^YW!{a@GdaGZvJ1ju?h3CM8o=>A7_f7Gw=r+&|1&~tSB zB`j#Lez>N^`gsz1EUb?mD9KsWju@kMypp0WU0 zFAhNF!%n_vKU<)mH57i>GmW(;;$28!IKqVi8Lt%(YOaAsK$u(#JP*kBwigg;n}J6G z$#)4L!$XHzz{!9}CNNf~Llz?4&A3w<{gJYWrAvG*+Km;GOGTLoSyYTwLib|>Xn)Y% z$!MGV$rF3})J?g818+*4fo9^ z|1l>2<0khclbdBR;vP1+hne_HGx@JHxy^g%yG{NzrnszogTK$@E;5B*XL2txxnsKk z#-xo?1bPzcb3USCYsT11iFp`1L4vTf%6<2;WyKYUB|=M!1I2-*<=SP0TwrHtJ*0U{ z$k@YMCN_!9cbyq`*`2=|&fFO}HgelLv5Doc&t8%_PQSgC{ED)r#g&z@DUHY;!{6d7 zEw1t{onBg8ai=JVzKx~r{~#UAY|DfW07Hw3m608REWpGqm-8_CiftTY?i%xexJ1zN zca!^U@R;SI-vOuk%gTzdh2f9oJH|98HX&lZP~VC8jhb-%#BXvBNY;0pni;>|{fnI9 zC3oLx81w7DZ-HT4YC<296sM z!~hW_;O|oRfG|FPA7XGa|KJ@o@JsDmd<74K#U=MGF2=)<1;)oq?ps`p2ciazj9hBp z;$l3^)u+qDV2OMcOkY?KLwRpK^%$jA$kZIKHw4R4>R(*BGO(n~zqq^#mu2>|1<1J( z+t5PPshJ0c_t=khO}Q9*9}I`NnzR<4c-Km!F(Kf4ja8hFhd)dY#KSR?{Iypm92fYl z1|Np&|1;LN#!sT+hw`B|Lj;E)oky6jFV*|IyJ;U}%qveR)ZhHimF+G;JIZ=K4)BySS z>Y$PtC2=LL5;dH)eDm_`@T9A0`F@Vd6>IxdLvB|i4+pZn4|sDT56y1$x+CkxyCNG> zlD5$5x^*jU`NPUp?X>XJ@4ss&cxk42?MDYEyb zR<%pDci5*4#;pOkIbb+%5U9@`xc#`AxMQz6MooG&Z@E0tnRQq_p*E=1?!7GocG!N2 z^55`)dt*y7);bM4{tm8nhAnU6IfL~eta%#s@lbsbcbObgAZck3)*E3n0xOQWQ6>4T zFE=_hxxD0fbXIL{baHaN@3$rM)!b-S^1pRDrL2+@QCodYF7|4$`Dt-vHpvc8^YN%H zbRxRec_O-6IS~!oPhicfrhQD}f~a%Df@nr~LDb=25FLGVUHyXS)J4alqiZc&t^4A( zEQn5?^{%YlImMzw& z$t7;vYJ_IKrEQJ50}(<=c6C>XbxGRb8|bwSk8d`wH^YukZ0}@zyKVg=u)pH!zFFM) zXRP_=MqSC+IgxUsIe=M!vj8Up<|RATmS{#TR^)@nPg$n-oSWalHOV7Eum4um&%)$7 ze{OV9avT18k{yBEs6YAaavxw(vJ-ygse9n|Cg(<1rM5)v_T$m4(DCTx)+PRr{Yn7+ zqp=wDf~k+=e=v1*J?~st5Y0*DZ5q<1IpL{iBxP353;Wiovv3c^g6OPN-m4*RniZb> z=7MNm>h$o$A6ho$gq^o6hz1wU2;cn6!(Fw~9Nbrt8_nM^6ZcY}4+Q7nPLUt0IoR2; z;6@P%cQv4;4`)lyjaH@RMptCiKVz*q{p?|W)Lv1l?}D{gh1xqAtG(Z=>|4m?2G$+>5Ni*) zuV)X#8zRUa)?0t)CKF0^~Uyz)ICNWX?4T?!JfVl zQ0qBb-FShs-}sYf>i5oQ{ig{1=lPAZxJQfrlZT${jyyA7688f=e$DE7_GgqOnSGjN zVL3*rtcU#MxDf7SMNV%1E9KgChJE7qK|^|!T{-%PC%GQ~7bSb}zdX4X|ErQ)@qb0K z0{Ipt*W&-eKlS?$^1Zb)@bWH;QDY&j(Re2OMj58N;9K%mJTM{B^0Sj(h$%*Wm zjd??2Ld0>6HBx&M$E;aXF^d>Zy%N+9>Lt0}@(5~Z3Pz|!8{3@H<9}g|IL@3FuHW_apTahusI z(2M=-6}%;gZyfDCGiw%mgEZ!r@XarxzT#P@4wZdjl;{ikSiTYOna8kCKm00`o$Zf3 z0Xg=dt!&VG1M7lqK|mg5*&cnX1JbgMA_|)+d%n2127^g{>rF8;|>-u7w7~ zY-mCR5^xVt18%szA2&L^rs9^J*{-gTj2m|X+UO-IiNiKy&a}B*9&S4$S#U4XMw=5i zB<))P^@B~vaBok0UgV*TGb3yF;a;AUahPvbw@bsT+hsA&`tRmHswYlKGDmOQ7__R4 zh0%D|+n7b$&cs`86Qk;^j2l#GGuldqjQ@EV`g^z5x_KnV-uQakjS6-^SB(Gf=6QeV z{Q@|4bk@xp76f#;c5L4c*w}c(4ZkIH9Xond;LDbMEO3Oy@wmpuV@Hz-5&kNHFIzTN z;5XcG1E8xBkHEnnkiVb~@m&iW1N^26VeQ-lSO6OX#PQojoa=u0E(#3C$0EL=16=ck zSKuW;eB*GfSFAn1jy2-l@WUEtZ0(si&XS6?$2;(G1QxtEM})r_XNQY6*Nu;_4y=h9;fU8_Es;2E8#FwL52;77mT1t4F9btmKY(wu13V}B z9QHPDgWpW7{Sn7+7jXzutQBG%?Eu&G^07uf6@E^HBaYuL;wT2s^NBS<`hTIj$?IFd zdG?HQV-&9a@yB=?3rT7=xqoMJ?=ZRNnA|~=dzs12?^1&&O#m2f(~1mMPI4*=e-iVF z>6`ZPG3x`H*L;k%uwMF%%6wm`xR{j;%>KQXLG-8O`|c^Lx?mivQkC7K-SgT%63?LV_V z^_{F6`s>$ndCpj#x}aVy+PNetTKzm~USxo`@vFfafD7RWjrA#G&EV^-PtC#l1>=+b z2{eXkGX4hZQ;g5w!&po=|Imzs27amasjuK+us~IQwO;MTczl!fsf+PICd_5|%6lfr zV>cr7mxsCfE_KhuS@6gJ4=3t_@!GJ_2YL4SU22Uh742aKVl2{m^ogt^ms;c60v;Hj zrFZ)Az>pmKaV$YF{50Qm9d`{AW3|XXoYE}(yACjaIQA+~D3&K54}V}U9;St&ex-hI z9{9w@D}*(Evf_jl-oM9e{bJo~eRcgHeCxk)*MDK9M0;;rVMTwqdJAS-1sQW{Ytn0IWzY<|!qyFQ5`k5}F|8xlYtc{Uc-1+!Q z#Hm`-#umbMHS}S>BU1;J+-nPY6UFNG_;u8Oq<(K}A#ap;GIGDl`zvg?zoIrGryV|( zDAVFKR*u&54gl(^CHAxD%e5rhP`)2!i&t6dR5gV11S9GACYz>8TYAp@v`5x$4afAc zQXYUlmaF?Eq3ae>wcAn`G%G&KCfPB9_Wu*5vAcZK6WrRcwasetl+5$W-<{{NG!F*% z{D@NWBJ`%bo-s>)q;??QE?;(ZY%MkY{@h}z;T&3&Fwxb$R!C`O4$DfJs?&RAx-Q?4 z>6u$KnQj)}gT2;WHJJ{BOs^C&9U7DAph#_DoY1;9>+o6CTA$KNUf}y6CJIn z&*L4gZl@?sZHacn!_kgf=pP>G@RaatRkNjg=#@rka4tvf$j@2aI2oMx&gqp3~HlM5eTY|%2^}d{us&f{7{qBR-eZGo(@@+(rvgIL{e-XPsvQL zJY}XwY6`tfi@rVQiuF4=s8?)N6`$--bO~xL;bJnJ*-wUgYk&;bxc}7R>b?`}$ZYqm zzLhz>a>|U|Ww8Nm@k-m;ckhcs0UZ~z#Ayf36RD( z(Y_NqmUwN?R6{S-33)vE+4pS;ojB?K*+HB0n%d94KRE$+xd5BI1-Du^c2o}!c36gg z(IXG|tVdRV-%*|TMUOJ}feuTeJ92+!LFCyq+>&XtcZ9BXc7&2Fq5Iu;z5hjzgwT@8 zknTt@778JjBV>|wn;fcl|LA?imk`S9`mX1Ls5SU{*Bkb@O?lG>gmSx&*#~U@&+hMd zY+p!c^IQqrQUC3~_T3s)>e-8KSL2%!z4NC}Y?|Sf(m#W4Cfeu(w$U*qDGfevT5EiW z_oqnNV^w)HZZBz%SL;it3%a3wVo5wocLVxz&t0yl?Yj6ghb{7Vt(~&(2O^v?Z^h2TY49`L<43s-GTIpKXcTVcDLay3Q@DzivrBuP?2}+UPpf>613g zj%(QxlGvXbFe*4)8ydE>jh4#$j0$SIvqT#2@nkK@P$SJwUjxPjM?F%r1*iYH#nm-E zTi(ldfQdEirQ`dhHg3yV^p$b#4bWwtuZ}{AMz>qf%g00YQiuIIt2zL+x)!?y@#9#x z15j>rZN_!jzsDM7O|za@v#e3ptWm41QPkJfP>0xbzuWQwbixxKXf-ZXi;RjcPstmnLG*6n$&IMnk?;e_oN z^+Y{qHzjPB&jck~s3j`pQ#*Q(_kNrsNcUz>w>8acxXvKt~^CWdz<&mwn z8d**8{;lEnY65!4V6PpPyse9qyp;!T^e83yo{>w8o-8-_oLe16pBR6p+1iR#gz+CW z+qTQCw(TcyN@C_UXb{@>5U;-@4beh56f&LAB0jGbuDJx&E_ zajnS`^20T-$9at!b}nBI_wRHqWcZE$ReRBn^vG2W@EiC1!2><_e~T$H1hMLG6N_tt zJih-xhx`IV#eA;4zr(TvJ}2pelMk=LojB}ZQqMKV=mW0J@L4zP;J_aH2lR1$vO4&L z54<9ZFFs`5I;F#YHOCOFV?4#yC5uso6(Ny3NQHX^VQ_C)U74sBFb;-Jok7Vtv7mGOV|pdP3ahW&fx9}$>YNLnQNLJ z!2CgPZDmQ``wqMb%K7bW)|rV2eY#n0l`{V#VoRCtG&>@R|GK~9s3>uAOL8PBC7}lA z8ID*VtIlBwF&B7sXN$cx1?w#q^rl3V4D^%M$7}|@d0dA*>He1164}|h#AciwIAq?- zk@T|zd|z>Xx2YbjJeZ*7c@slxz1TCV9f%z#PPezZLqAA2yuuI2ap0PT)Rv`q)AjcuyoH z=%Yu17(Jv<9u4*#KjOvsk))3w@fbg>sL@AH%c`wrz^43YT7L3Y3G2%pICr!Urvl|BfGG9%6R2o^EyGT{M z^`5rBCO?*3w@Af&V0>y*-*II<#+4IMMasu17zJyGqa|&gz|p1PG)I>V)BGXXE7C8y;|5KpC#eIr79I!$+RQJxNpk(QH%KxQmiMf>-8N3|L?a+^B$ ztc-Wg^KC|*Jll4Dog6_QNW}TCbIm)%oQ)}^qbFEvjzkqZcIR#8dE0MVjC$GCGC;2t z<2x_~HxYSDWbdv6S`WnCb!`bMPlDq1x;9t$-qBv+E^m{kVqT11=fxL{w@pgJml#U# z_T29=zBQY1w}|BB?IKw43KUoV(D$SN-LoEoZKhW$sPN&41-IAh-VL;SMkJS9qYSz zp1^Yx7F%D#GXsla07Bn}YYW%oDa7+Co(I80M%V#Zx)^|U-~q#cJE5oRL7Ya!3Cf5Y z2ffh*Ok$Ja9)@)bCwO__Zp4~JPzLWf@TDo$WVnajj%6D_aL|4kSj)KvYsj=SJ_2xv z4sC!}0f*gh;r}oo@q9q=3&5_l@c$h7qW>#^^xuMo6Y^OLNPn!g3;gv&jlK+vf22eI zUxeqHJJw_Z2|7Fpc@TeHhp>Ao!b6W*gohnS>D!?11ylfQV8^iyJab^LxE6k}`Lu^P ze!GZQ;9+_nVey9WBp~y(6Oj2m4f&1&{19vQXHhmA^madjAM~a75GNnv)SG7f7XZfq z)&eSkA;jb2`ZDMdZ-d`D#3Rml#7pon9_$?oI0TUKKSz5&^%lPmI0`s){Y3g#LVx!- z{ElKTz(}9?emrRiM>~d0_hE$3K^^Ty_-*i8hw#Kjy1;*i=URkY0f;57K#2~E0I6Sm z2jX-6%n3Vz9{Amc_{15XIQ6hcBHS#%ae!k1S&mj@n({jiNdG24G|RwIz_EbP%RWGz zv(2!VcnE&aVb6j%`4WE?^nJk3fc^^bXFw-TI`O@rbB%Hx=#9W12VGzH+(jIE-UqmL zxEA^59>rSFi8DTN>SZ&Z&|5peb;_3z&Iv!*Iov~>;fN>V!C�@DS}6FctBh)!|;i z(ZFl4XL15=?43011Pq}&6UT2C@eOzwzZ#J8SOrLVtN^4umLWdN|1t7W3cn?YZ^(oA zk3nbozYlwkCBW|h-H-=y?B57^K)rM&`XLD1OJaUtpOQ9zCFU7A_+szr1j4M)-Dd%*+fN&XtI!5_>h9HW|3-JS-5a{> zT)S=3{Tt!_v+ibJ`b2jx!r0ZLyRGPtLlBPqC$n$rZua3U-TgTHXX|d-5L~9aInLax zyAQ*EgYM2l*}y)wM~40;+>}j)?rsCD*4@-yzZMVU@OKLy!_Bp4!+pr)ZZNsg#$sXS zn)qxr`TxP>{%@1J!{pv=a+~eGEj0P#JW(tym&t#e$v?y7pKJ1;Z}N}r({Y#S!gk|G zF-*GYwswR~HN&sJCcCEd9y6b&o8b}a^M*+tYR;2we|)}p&ofUVxS@*ApfIwd>K4}o zjR{NlxT2g-^neK#<$x%9%oPZ4Z^ z!T1oA<(ENky<%A`Gx@ZFw%m`ie$rxXl4RKJF^mQ2`-{v@fBSayi)CLZ*waTVKrxD( zSM10AO?rkjL1G(HScK~1X%tE`Q-p+ddqG}s)68l032qeGl(YH83@a_J5OA^g{Did- zuxy2UVft|sSH{fa^-$7cas7)H_Cj3rP^Oe`Ext2=bD0_e?e&}L`QLEkg#P=ef|s$8 zdLcdkJd7KXqV+3|T^IU2j4_4pZbJNtCqWPRb@ow>_)O|kj9Yk5a6k?c@OLRaf5zvp zOPgD12>xSw7c`Jd?W2AL4}--e_fap#gJUayd>>uPKGDT^AZieg_@OLcxsQ4=9+a=~ z!#uCg-Xm#zf5Nsm&vx<75-AV$4K%jb$T~G1zEh1lhVyIx41Ml>o%YxoX=ELB>aW4R z#(zbVL*MlU)q8y}dgHewY#XrE_6W4ELy4P`Hq)9=BWwup7IJD)xg)ig<%F|tk-cho z;&NA4aU#~s6GubSZB_|ZN3S{HgSOko&vT^6?#IOX`KI_i)Fm4XEwU7KW4pWqn%nEH zRDY>*x2+Z$;;=}e{t&kc&MGu^ zQoSE`H{_90I(Dkk2D`^LdwmlEHrI%Q4&Pk?n|lOS662mK5!Oj6B5^hK4Ue@aB*Hcf z?1~%`c3@IYBF|H-+v9f(sM+WHAgY9*!D?|rXVey~!%eOO_1($~%XLfrPkqzE_V4`{ zG++lk4e2%}K*qLKNf{K9#@j=eg$6%zd1y$;)>MSsoio%A+J_{))^1Ij4vexMu*n^s zc%5ytE23Psv3(#c;!wZP(RwVJ(ReKC3{lQ0A;^4uy+2_a1)b%T3Uv)h*x7!Fxme76LKyRUBA6m=?x4#as&RkxQn zLf(My{O3Ei;zskw+T&uDTn3!{01{XR2^f-4RBeyYknzJv6KnN}13K+-A$7fKRWExp z@fpaq7WaWee{@)Iz*g$sQ(|k{E|U~d%ARx89UlMOvp>6a3f3H&qmB@Ed4y~>wkcM~ z=aFgH6Nukq-Fydh)Of$;G_=KsOAuooLs&Msx~|e?8Mo=XC02yxJ@dRlx1eKCzqO5r z(4!L6a$iXO6WU?lR`_k$VM-INu-;dQR(NgG1aI8F3h!^d+uE&(XT6rKkbR;QGV(pP zqrAcT)Sx#fVZGOuIG~1Y&m5vY7kSJ#T4L{d;@0|q_)>Hsz*fz*@1$tv*BHCVXE!v2) z(T)FEp+O;!KYmM`_ffR9AL#OQxwJjA>mbpDJ+{%ulCJ2pp7&7wP}S{w(=Uw?EpCj~;;wUNHXqVkT(xL%V?~P_ z{vxb2h2oxZ@_h|$Z-#2Yxe>^CE7QO|$?ZY(d|M({RgIp{b~r$^!^3EgIgpCS zH&EUR&*zQK7 z-Q8qvcblwx;zXPC=xuIJ3ELa))YT-+ zy2)3wa5L!rnI*5mcQ82EV;th%KjdR?4&kof-t$81>({CeU@hGyrQ(*~@`hLaZvO-R zgg_JSf)C;@c()~6jSCH^>pAyaIHA?nsYo8&azCKXh5wQQDb~hs*@!&~S~PkR7L4+w z0nem#+7t11cq{Qyj%(i+(vh$`D{rxEO2(bF&{BrBehc0sJl`aH6CayXGI0CGwvn){ zX4yh&eeOchUsr`618-xM*m!qr6z`6+{-Nrr3%olUeqzh9HPHR`lWO4@;KgwSS?m9>zFqNW%+F4Aq7JK+;G zUo!)0C%N`c+X(1s|jwb=QKPE zh&8Z1#2Jq`&UgztbTS)4z*n2-#H;X-?@&N|0`qQ?1C97XAC2%efFax^LY(}FdvrRE zCN|)n5owW$PW)MX7n4r`Aj{>#T9^lJ%yAlW0AUM%4{`D%4n0yq&jEcHaOlCt=)}1u z#{6Mzi=W?tPqBu>^{0GtZ|%xy9nXS0T*J8gE)S> zh-0lp@c#&q-}|JU)7|7d82sqZJo9^;Zpve#?xw82r@L8SyAYRpusQIDckFwAn(kf* z&mZY-+Ee(s?*0h;`TZ`=(xZ-@a5FxC6?hEyVUzohCbz!!0w1v^7z-c!4$3dX?XZ2n zZ4BGx;6C}vHE-<@!OOf&hzAlw%JqlRhW3V-F-7Bc=URa zqseSCQ5+|S@%JJa>(%qqo52fs#qw;U{T&&Ma82^<7GDwH9@WVMSVq z`Y^}CP!Ri#fy*v1%{N`gr{YDzGBe&VJbAzw)`|hJ2A<|`NrvG=KaA5NJirBiTthX+ z9dm%DXb9FFrO*Lbz)XhyMO&jZa#3`oG^}BocRl7J<+<|2nbZH)A}Qs$`kW~qaq?^M z-LXz};QV!B%O0;Za$a<#^YVrtdVlNwR+Buj+TGnEE6Hip9(yYy!^+{+622@Y+P+(n zGwfi#dVgCsvQLwL=DdCysu$@a#}-)ccJ<&Gf>P!cP37K^_-d(x4c|@f5$|#LQ*xjj7Cf*E z>-KUl)KjeOhRRBAclfTJbIu6tRF+crZd^oCn4^HF&SP&i=t_(}JVI)@*Xxm#I?vsn zVx5zrm+9(yYLq8%zjs~g4!8A>v}w4nhq!zuTb9nq_GBmYG<6-)xb%YuU4d%v;GFwC zFCC=jsH^reD&l~DpU77c$P#-ffLH#_Z z249+x8D);Igp6A36qitYH#S}mPJCH4SIr(Lpm*EKxi-3;9n$RR{5&6TYu zq6HG=tVuckkF+@X`Iq$7u<@E~qU{RU8!YJ~nk{L}t5~(z zVM%|$`|C3nOSR{4drDF&`cQ2#^=drD)<=_SUO0m>saa8tub7^5C)+VYhI~F~#*7*8 zz2|;WFCTQK5nC>dMQ$ zP#b%^9d=3EF{}$)uIy*jLud<_^$<3LEPbKKIjStJ(r|uWhFu!XoG)w82hw zupOu1Mp0Xty-w4oz9(ic;eKcwu2tVTHQ=db0hBzy4tkvV;IXV77OI7XP*1z3fuqhM z_{hz&G8)!uVF|b0)*ve*T7L&!%i2Jk!`2js8mKMy_?u3}Kc%R5s7+WYQzQvmo$}kV zGEms{q*c!pSoK^a39Gb<9Q$6TUia#HS@nXq1Ny4e<2Jrup@;SqbWqn>3a^z^Wvh|w9GizKIbBXC4chu-LD z$?Xm0Y8IFO*23OU`46r=N+V_OdhgusYwr33^oUpH(6&UL1l74%V7ywf2+85mkeo8@SPjNYFxT% z@hWf`Z;>!8T_l5_42}D&uw^@JMnjszT9|6J*X6Ztj)$IMiWidHYzU$r$B z#G7REPJ_l#xCL!sFWZ2nIS32Pa_icT#C6P%{FqjnK`l5LJ5w6V{HN)8|NM-R_fM#q zYnRh6W2h2ow3heLlI)%7oq+rbYSspK7xK$i^KH>;FspE+e4z2vr15r)-av`@@(f0A#VkK>%tIy=$c z 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 z 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

    @=3ARF~|2T^~A3?v9sAiULExu{t3p`#vK1O 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

    ndGWo1>Lf>ovJ~>!+xhjxkK6wF2@ybXi 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 z

    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�#Jn4#rPo38>@g` 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

    _p+E`r-^O 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 diff --git a/mac/include/chipmunk/chipmunk.h b/mac/include/chipmunk/chipmunk.h index 6337fb1a..d7faf039 100644 --- a/mac/include/chipmunk/chipmunk.h +++ b/mac/include/chipmunk/chipmunk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,20 +19,26 @@ * SOFTWARE. */ -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif +#ifndef CHIPMUNK_H +#define CHIPMUNK_H #include #include +#ifdef WIN32 + // For alloca(). + #include + #define CP_EXPORT __declspec(dllexport) +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +49,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +90,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +187,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +210,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/mac/include/chipmunk/chipmunk_ffi.h b/mac/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/mac/include/chipmunk/chipmunk_ffi.h +++ b/mac/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/mac/include/chipmunk/chipmunk_private.h b/mac/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/mac/include/chipmunk/chipmunk_private.h +++ b/mac/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/mac/include/chipmunk/chipmunk_types.h b/mac/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/mac/include/chipmunk/chipmunk_types.h +++ b/mac/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/mac/include/chipmunk/chipmunk_unsafe.h b/mac/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/mac/include/chipmunk/chipmunk_unsafe.h +++ b/mac/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/mac/include/chipmunk/constraints/cpConstraint.h b/mac/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/mac/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/mac/include/chipmunk/constraints/cpDampedRotarySpring.h b/mac/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/mac/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpDampedSpring.h b/mac/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/mac/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpGearJoint.h b/mac/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/mac/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/mac/include/chipmunk/constraints/cpGrooveJoint.h b/mac/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/mac/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpPinJoint.h b/mac/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/mac/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/mac/include/chipmunk/constraints/cpPivotJoint.h b/mac/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/mac/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpRatchetJoint.h b/mac/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/mac/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpRotaryLimitJoint.h b/mac/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/mac/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpSimpleMotor.h b/mac/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/mac/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/mac/include/chipmunk/constraints/cpSlideJoint.h b/mac/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/mac/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/mac/include/chipmunk/constraints/util.h b/mac/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/mac/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/mac/include/chipmunk/cpArbiter.h b/mac/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/mac/include/chipmunk/cpArbiter.h +++ b/mac/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/mac/include/chipmunk/cpBB.h b/mac/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/mac/include/chipmunk/cpBB.h +++ b/mac/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/mac/include/chipmunk/cpBody.h b/mac/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/mac/include/chipmunk/cpBody.h +++ b/mac/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpConstraint.h b/mac/include/chipmunk/cpConstraint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpConstraint.h rename to mac/include/chipmunk/cpConstraint.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpDampedRotarySpring.h b/mac/include/chipmunk/cpDampedRotarySpring.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpDampedRotarySpring.h rename to mac/include/chipmunk/cpDampedRotarySpring.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpDampedSpring.h b/mac/include/chipmunk/cpDampedSpring.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpDampedSpring.h rename to mac/include/chipmunk/cpDampedSpring.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpGearJoint.h b/mac/include/chipmunk/cpGearJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpGearJoint.h rename to mac/include/chipmunk/cpGearJoint.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpGrooveJoint.h b/mac/include/chipmunk/cpGrooveJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpGrooveJoint.h rename to mac/include/chipmunk/cpGrooveJoint.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpHastySpace.h b/mac/include/chipmunk/cpHastySpace.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpHastySpace.h rename to mac/include/chipmunk/cpHastySpace.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpMarch.h b/mac/include/chipmunk/cpMarch.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpMarch.h rename to mac/include/chipmunk/cpMarch.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpPinJoint.h b/mac/include/chipmunk/cpPinJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpPinJoint.h rename to mac/include/chipmunk/cpPinJoint.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpPivotJoint.h b/mac/include/chipmunk/cpPivotJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpPivotJoint.h rename to mac/include/chipmunk/cpPivotJoint.h diff --git a/mac/include/chipmunk/cpPolyShape.h b/mac/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/mac/include/chipmunk/cpPolyShape.h +++ b/mac/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpPolyline.h b/mac/include/chipmunk/cpPolyline.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpPolyline.h rename to mac/include/chipmunk/cpPolyline.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpRatchetJoint.h b/mac/include/chipmunk/cpRatchetJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpRatchetJoint.h rename to mac/include/chipmunk/cpRatchetJoint.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpRobust.h b/mac/include/chipmunk/cpRobust.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpRobust.h rename to mac/include/chipmunk/cpRobust.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpRotaryLimitJoint.h b/mac/include/chipmunk/cpRotaryLimitJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpRotaryLimitJoint.h rename to mac/include/chipmunk/cpRotaryLimitJoint.h diff --git a/mac/include/chipmunk/cpShape.h b/mac/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/mac/include/chipmunk/cpShape.h +++ b/mac/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpSimpleMotor.h b/mac/include/chipmunk/cpSimpleMotor.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpSimpleMotor.h rename to mac/include/chipmunk/cpSimpleMotor.h diff --git a/android/armeabi/include/chipmunk/chipmunk/cpSlideJoint.h b/mac/include/chipmunk/cpSlideJoint.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpSlideJoint.h rename to mac/include/chipmunk/cpSlideJoint.h diff --git a/mac/include/chipmunk/cpSpace.h b/mac/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/mac/include/chipmunk/cpSpace.h +++ b/mac/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/mac/include/chipmunk/cpSpatialIndex.h b/mac/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/mac/include/chipmunk/cpSpatialIndex.h +++ b/mac/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/armeabi/include/chipmunk/chipmunk/cpTransform.h b/mac/include/chipmunk/cpTransform.h similarity index 100% rename from android/armeabi/include/chipmunk/chipmunk/cpTransform.h rename to mac/include/chipmunk/cpTransform.h diff --git a/mac/include/chipmunk/cpVect.h b/mac/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/mac/include/chipmunk/cpVect.h +++ b/mac/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/mac/libs/libchipmunk.a b/mac/libs/libchipmunk.a index 519d0f30fd6da0d2eb4ba90fd4abc2d8cc63cd9d..0e14f0f5c5d8f4e5116164916bab385e9ef7fac6 100644 GIT binary patch literal 246224 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≫Hq;|ImK^udQm-GDTp0ofAi{sw9~W5%{2 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 z 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

    7oH_e;%wmf2tPhd?EL zK>2S0Qbi@F0r{J9JpYuQ>mV+>q*V**>_<>{G6cT?RQNuklfBpAw}DDmHxS->iOzvV zPt8Q-(@i-3#Og(F^m1Hf8*!&B`qMSF-Fgv+S=BG8+EcEc=;R_`;3i&&l%d z%CZ+MyJE!^P0c6(;gyh`HgnQl5!8ZYxP}KtgLqQMv7)Kv!WEZYftrpiBH>Ozn(pc= zn%AsedG*C;D_*hDtM8D`jHznMQ@d1iQMCe%5_PeXpR6!CXf4G(@(aSWxgKIUM1=f_9_Rqp+BMGUA6^ zZ)Y0IFeBY7C}mKUsqmnnoBIyYVzKO-uigWhzKyxwDO=yh7NZx+=K%DgG@@x01>I8^ z?){VWYRD9OP;kiT9X=^D-{viP!|I2Yo(!4WJSdoka;&I{=3VY1-J{s3%Lku8^s_!IbTqu}%wmvHGZ zovGX1i(wt3Inv#y034AKU)3`j^|~q?TMY6&bMRgF`e#Gcom8C;k!PSGb;UmRs>#&T z$*wtfDLKiGXAdP$M&9nDn|oq6cFU!!63%8DCuMC(t~IpP#=F)J%tjEJQ zdRkJ%ku-xekyzcMI`*6N-tDBSfD@C(YIe@at`_*_UDZ2_x;{Im;^bcV+yt#ZoIC7N z-1E_WU(#)$cgNkPo(=tvXWtD+CdFR=@xU~7N6)XM$QIl|6ssN}B?V{$-Pd|7e4hTm z%e~XNhjWZ{c`Yh)oa#EqQ>{wNIbhX%4TKuD{x#jPNm6&q%@q#LIbx5)i;#YmJ;_ux zN?%d+Vh_k*4+m~-W$J%w=}^}3=J;z%s=98x1xr=x#;pLDw~%kWjeloOAziT>AHlVz z%XuE0Ro+!m!s+edpQ+ipgz^r~e2qdn_%F$!_`g+6Zzgv>S2!CsY<%opI0BD-jddg? za&Ut99#x&lAMK@DU}N72({lO%CyZ~V*{sRVaVwLtwXkxh>h24yTmM2RR?KNs{m)~? zoSC}Q*%$m(j9QYY5>$&$)e=xQfDb&wU9P_F=$HXRGI=857-oDl^!gHJO z?_0=Ab?Okj`nm`oFT(c?_3PfxsjT-Sq^(SX`c00Rx{)u9&YFY@o?58kw`f{2b&+ZT zMZ4T7NIlMBEl>C;fXe+IKPosa&1Xx;S37)U*(Aw<&LPW|r7uZsB5RRzd|Kz{Uu?$( zx{GddiZuR|)up8~p?>VA+4k@jCARq3X7}}AYPm~t6*+Lk*>9PRP~}|D67RI#8x~oqjB1KMBnSgGbx$LuD=!aWa@9#>?P5m zU^cw$_}Kpj8t~Yw*pVEZ==g-mPKU&>Q8dt#+P(9w_wRh^ePecaJo`qf_vBZTO`N;5 zUG(y{WM|8<+tgCIYj8v@mGl0gEw$y`Qj3@7dTuh=@!GW5=Jl=|;*~d%|BfxB*$qvT zbky_tUG3Pj2PnA>>Z=`1{p%RuLF)QJtLqx-dJpzJ*iqp!sWNX>FJe%zs(yjbNQM4a zSM}vYKZ>eOf~Kne8nf5IcMr~g|NpA*t+W7|%c7e&KW<0Olr%;#C1v&d!S#UaFx;XD zsw5^aYLC@V*}~$K(;BWf-srye#CG39tGGw4f)Qa6tt34{Xhg{0OwLnyKO)@AXYOXA zL`HmujtD~dOGkuiq8~*wITBgXm?7oBM za0ktSiwdqeqz4fOjr{Y2cx=`h?&332=aE6u-1*EXDZJ%oo834uI=Zb-R+2u zu^rKq?1)hI;dVs-pd1g~5uL}5sPvWHeoOS8+}j%465ZXh#BYhJwI#afj-swMZHXwt zPvzMUX`j@Vhv@NsKeUsD_Z@K^aN2%|b!}un^eQ)8>_$oT>DTtRzKea(0l&)hyC5$g zVDKLOtg6(*Wp3AFWnMLJTx@d>Wm?wpGc~O7*Bn#T`7_nOn`$ak-;!%t#~b6XO=Ryz z_Q!7AhiBM;{1taiXAHmpsO+kk!Jgxd!97Q7k?*me@o>s--~nmxF(vHZviBb+X#c^j zGIzQ3gkIZ!^s}ntlBrWO#$F~|zDMuiAK77KT{Y$MC(Hb$x&X@R4p9V)e;=FtQhNWf zW^n%zpFd5D*?nw9;_h0fY>!sxZfAPK*uz5l7kMX@e#`TKv6T`(= zVdGDe8^pNN5WBI1_>x_%anwe3-mJ*!6I1yu6;EQNnm-pl`U@%Kr(mz30q-Cnvi}2X zO<+Loe3~z~`_zwvU77^X3ZXh`KuNvN$$o&b&V-@!E>>h zPi=T-b>~ss4&oNqUf%8aa*P$f72A9U%MR+b_@36|4<4i3eU%-Z<@DII`Hn5-u9D;* z$ERQW0w=`%5kwt zOD8Y6vpO}O|B?2f`9wlHsynY&YpNKmo3FbXMd#bExcL#gQ3~vJFHJhrrXEt|ow<#j zCP^jV6Bi*{Xwjjnu4GZ=?4RTI8zCGkeRf&%7wr#L*;HQpXgoQ@eJ#>l&jX3NX9?0) z=AXTA8H+aRZnXV^Z#Jb3zvm|*7JsDvUXFcXFNyV1E>KDLrf49Gckyc=y$%x9u=G`r z_+25+Jgu6f#ID!0r9wUn8>qh| z?vuSPg_RQ@LR9m^Xn{k*hSVcg#&-8SiIY@k@?r-k4YpHXApQeaox&BcUtD!Eb;VG1 zh@17go;GP^5!FFwn{ef{tnw-20y6h>D(CSYsE?aJD*J!vp|wNjSFtaqsD({EvCW@X zZJ?A-_Yf(3{>M+c0`{stO2h-E4qlPv*ms%h*iZ7Ya;q{VncLh6M2a!Vd=Bk${xKE_ zE`EYiXBOawzq{;D`{i{NHw-CXyy_4MqAPmxtK*>&MXi?Z7*?>TblJb*QP&ab2Ovfb zOWsI5)EGz>@25asiGAVkr~}B&5Tk=7U7wa7AA@{0e$} zn1X`et$KRPj}GrYi$*povtiZp<`pGpUC!a-hQyg?CO+8A(OJ1{1*a_9uwwm&Q<|5r zy>$607q+yzXU&(NQofEu!c#uF{?d}>|=9IXl2 zmpqhiMlhKL{BrppGXK}|#D9p%Oy>DK{{1XYWR9mobEQ8#dVNP8|M)RJe3b{5TW`_- zM)UuC9{)q;zc7z~xW}M74!QDQ3!_6OU;3Nl-k)c_GDFh0)%^3t-*5gq^Mv09%T;Ex zr#ysyc$cl22s6ar+Ew0rYemnnaKHq-?0a1wfoO#&8=l&sGvQuS);%cUw+P``Pgm{I znSh^lzi9@Z-{iOLIghV)>P*0o$a%RBkHdzi_UcT)o8RGX#VP(j@=F}>^we&h33%rX zy+5aWYloiq_-e-^;a>#Kwu2sD?P4VSP2hL`#^bA<4~MVv&|RT+yPs$6o(UyWf12nAzm{~mZnhBsU~_kuUe@OD}pwZ;ok8CT_x7wG4Z(YegFn!weAwWL zK*&#-Z1#5<{1_ccc*O?)o$AI#G(Cn8R`~&@7{+|cR|FZ^9 zH25Ba4>Nvng`(u=K+3j6@1e(m|3icSYVc+tX8IR_?+0%MP~jSZ3ReYGxN{7iZtz1u zu4I%v!+F3oU>|Tgum`C0{RpV^eFw-y<%&$&Q~ zs$>q3qAB?hkShlzwJ??`(lb8}R60)uDxL2IDxH%J>b|1vuO8#+Jq8s1KA`Y-0_DHM z;13M`v%!Bbc(cLFfJ)aQpy-GfD?0Pc|5Stj&EUI%!XFD%J}Tek^M58#`JZa=I3QOa zN{$8!|4w*oD$jobsyuH73jYS6%J1_)mFL+&m7Cl6U`p>YA5dD*Y@}CYA{ws7AL1_XK{ilJV z{|%t%r+}h=6;OC$3&=egf*GWOB7STJdlz-UAB@D_@_I~~e_89Co*lw`VV5z}`!2*N* z(C2epkHKz(?FJhSmKsbL1h{am1eWTkaNlV*?(QC`GKP6e{`|uFhfik@>mB7+{$YKi z@)37CtVea%+S!RiW(z;r!+LYF`G@u8ix%D?^Y3?tAJ&)W2Kv4~7d&SEVSPEy{1dp# ze21Un3+wNVW)JJ_o6X)$rOD`?r|`piu+i*c{rNL+96cI?%>TrnzqFA&v8er*_(bjd zv;0?Q`L}2JU!3LNo#o$?Wv|S_|4^3yy;=5fY13_!YS*F9=7QE0>(kd*owMCa9qJLe z-CDCw7gy)6Td&KQB3h1h{kqkcMx4sHmKm`M)6uujD+e&Y_=P> zZFM1bgL7XVhI_U(Y>DTuUw4J0xyi~Em%j{ z-+_&$*$D!xSl+T+ISH9}!nY!J6~?JFv4RiGKIPQ8?jEfFH+#;8{GYuAmpZrHF@Bi;?+!8&;_kul4KJ!E%-~HJ+@)Z3{`TUZ*Eu;BB=6if7 zTftazgO%`h-!+f^fNe%^mWAknp3)bL4Nt-9?voC8-?iW9B`m}t=qXKGSuaNE27)8q zchzD}=DQxG-wl{GBkyt>>Aq{wTcYt!rpK?N3bv6x%WJeap*OtTux6`>pog{Hum3!8 z{$pL0w(v27pPLf1?z<*%Wc^vt&N_c1Y16W?mY>*mj_erV$MO z;Q%D#eq!W2eLVSJ;PsgPKQwa+OoC529z2GM+i?R$^%FI?GIyDji>8o#3`Wpt*-{51t z#>e_gz>a^)A8YRPH@fss^psBZlx`5Ef5}hjFDn1W!SsKPQG-&Gs5?q+s$$)iKi0wf z0=iE-jpzT|qpj}T5U=k1oQ|oR>iBngqx#Q+QvNr%uG8;j5ZsT@gxJh`ubKWs!Q}72!ZUE^B?|qnxDpj#}qVIVP;YMW~9vsd=1#0@RLOPa}nn>!X+A z5K#(BEfoQ$b)o(aEGjoeR9{QV>y%hhJb1nj>Vh>4jIo(s z>E&Fg`?DZ-CW0-)v|~GxUq;|;OQt;d=(_1`mIxn>DvwO~^?ntX__VeSGc!}po>_(# zlxY%Xy%v~@kKb+nU&`Y@%P4Bj#SEbz_Ib%X{@oU0tqVM6Ncgy|BJzcAH2-|z`$h<# zV1$v$7k;bx7m~7^<-@oxujt*zFJX9Ae>w5?gO@Zs z)q^u3-g7!!4T#<`l+M;s&=b#K`zYu&sI*Of`*7(K4=U)X94>v|1FzZWsl7N8@)0?Y z*^6JD>8Z4Kle1jJBWpH1Yd<;h#M23SFRdL7!MlleMnO*bn89lbJzuR6DEITsJ|74l zt>lAdm)=U+R>|K0Su>BQhf?p=SbCS7ZE!Xa^S0@s+(O<@Y;JQ{AUb)+TdcK@IP)){4$O% zO8&z+7fink$QGt#p}CiuJ8sTh{5`5Bubg^~r~Lhwy>tKXq(}1V`^l`#E&RlP4CCe_ zX72_^=5~Ja598wfW)I^ayj;i63-d}NxZ>{xbDG)1yrLV#@(=UGRTe&s`yV%Z!U%|z z@Vm`E-NLKfWPZa>{$XBOV)igkXq+`vzPwJksQvp{{;J2Qe+`zX{o7go|CnVL^Cvp> zJKkKHn+7Y&v|d-iXB*_2T-dUrS-dkz zxnH?v-MaPv3DWMPxgb5YtCnw&==+Q^AT>GN!7p2T*_vGVY4;q`^rKORr|6EKHp}tH z{J)X-X&;{(upK{b-6gFXTGEfusncBV&>hnyfhXp8ep{jq!?_Or>$cB?AK%jLH}KG` zd%x@R=2%r?5THbWKwslj%mXVy{kl{B6x{(hjwfGA%n(2~EUF*uDHx_h9-kHi}G z@hpmiUNn1gm3L>X?v5C@8=d&Sse2@V{$|fX0i!+Zht+hS=17LpER$~?+3uHf1ED^% z*O9PU3&=W414mrPIvL}#`e^y86-}34xcaiSD=yX1Lcu#RN6eR=ecH!-kMsSgW%>H6 zt5;vKI-570t3MqgfdvVE81<*&_|oFf$^^c2u!sI6C^Opr^a*S9fiK-h136g)^7W@V z@*K*S7UM}K^r31JqHG1@ms7!}@Wb<^ON~&d*IMWW+M<%He-6i&ZnnS)OF}#Jl%{Dk zkSJaACVj)pVc2Scwp)PiQ1E7t=3P!BjUP!{hqPNqtfQWlKIxCOBgzbtBaI(>jBkF} z=;pbXZnd+b4ZqD|*`F&G z<8GzjNe%LekA#oBp6Z9A_!R&g#XkaeTu;K@WTQ=Oh0w zPwAHcD9sV2ujHrn7x7^ueB?8Htc^a_p8^@#MqBIi7(>OR0ccsQuk76kGQG6VT+qOAK8${O#tIW<{5e zU+T~jYqY$`W}4c1iRP1O5@xLh=91T`aZl#c{BrRN`{jwr$1jDbGf5AI#2@y(Y7x2O z?-?O{oSrO`FMPZC?*=Cq{aVH!8RJ_GNnhCar##va|Afu=e=fgsn(^1ddNzBVI)ivC z_{9xR_2f+8!$tUs;&%o;kE$sOHdg6D+jZZinJ@GpO-%<6O5pP8Arudx&rmxcKIcGk^@0@0MR^K`C#P4i3 zynOu0IfZVWHsx{J7k^XUZE!4*COPFz{)tbv4=DR*`NvwRq!lPW+)^NGs40sLY9A`Q zWL}9ccZxyjp~Otr-EM^+AZ-eN04V$?4gShtFHrarW-a_50fjGljKaU!;8ug;`zgM4 z2A2aBz5=N5X9E>p?*SD4M1$`!I36hc=Nu@Q{;$9|_+K~smx0G&UtsQMm^(PmeI)*1 zBlP(jS86a}P>yo%hmK&6!ES@?1{)2Q8cY}jxNuq|h#wgC3Ez|*f?-^lz_;vS9C_9J z!?+=Sp8ONgkhzeb_;LNRVCM2IdoY1t*kf+JcsPHvZ!mkp0-R>{Fis0i_+eaBdCMNg z*=p=YiZAxpSfX~-Q`Fv>W!C~E>i=YxzvFFXO;_--YL;)zz=;q@O zX7l>s!(~xZT2~{Pa;T5eDj&}u4A<)Z6SZJwCne3h3w(#bkrO{*B>vs(kI#w7k#tw` zqU^hz{JT=drh)`NjQ9=WQROprr+A-6g~0^-c)s;3k|Soc{DzZG@c5#quCkq5fZvhR z5%L>~jZT9nSFi=%Q#2cvT=N~7->}u_ZL<)Epl4m#xiEHRm^A-lu6NGnSC&rq?i$}@ zx)Xjs?=1X_(w5su{DxYi_iO8v+Y$;jXrg(StN0DW@k3^bSBI(fpkV7?`ScZ$pIrO+ zk@y$wM$a`0X!aYuxzMvB%1Gi!{EPMv`h@MX2G$Q#Dq5%TAy!$^9hkv?SJqkg>JGCI zSb*QEvkD5XVd9GNFGN~DT}1r^Kjyh3HsU8FQK*qx9Pg}5q!tt-dypMu4N~vUM-1MA zX}cGkQIPCikQ8NLsli5rb%MPMR*8+-yI_p~SguxpN}WP&G}!E5>agyVY|^)v8__u) z84oSTBs)vv`Z#*YKtFrJH2>kkTImSU2qjn1HcQ|0@(2> zF!Jy+c-o$EFG%~pY07ei&oBDPxHT1LHz`d&{@zr|>mmYGyXXn!(~$K@rkv^@m#s*C z96h$$3yO^&Ky^~FWy2XxiIKaPDEg%ldV}`{-6nbG`uC&*g6cV8rGr=1 zKF8XF%D9y!EtS!ZZMX}HS#kzK{@k@DtB=vdUojZ}Tpxe2kNB^{1eXfy^t6WidCZWSuYo6=UF6L9RI@wu!5k0g4 zr7rM07ac%3O}~0>XAM>_SQES4O|a%bEs_Sx5uCDc4z%ZrAr#H8<8L|oqQR(?OE_mH z4KbC{?N{N8lPR=F-i`dczTV3I0we__dn@;=ZE9dSkx`H2lrsjX7L<+3KH@^w$igD@ z86GT5b}hkSJYtmwYQ&70#hMR02TjZc_R8HI(tG|P4igO=2 z_GO)hQ3B1b6=jWguKggTbRRKN2;{xG^Grn_1Z;Kv?nGWH_2Fda@e=XbtA7ag`V_75vxg}MU8p3ZQaarLudmI;L)n;{u1MBV zI1`RSNcWl9ld@fRI)0w^(4oX(0 zIc}zzkt-iQU#9o{S7+L-2Q4-8#<#wcZg9QwFfdkp zh}D>62O-a?o@wT^`LLQ|lb?mQ@~Wn=-No^U?!vo&^na(`SOT+1)&)r8szbwa-95?P zj$Po&@Ohj6@~sRyl^oZQAw(CcxgjFEev0JuB7|z2TAiuc&exh4$b1(??V-keRZ$33M8iF? z;@?wgmEBYqWpXW)8W4=c5UncXkjJTwqzhf}Yf5(d1@H$cq_H(XSHDXUtW?hh`1&Vf zi%ZyWVT;#7Zq zzW&Zt#3wK6R{gy={AfT1ef@R6?e$k1slUwr8yOG2P19pMcpo{S|4N|z4lyx~Y&>Xl z0@&R6ve?sm0A>aB){5TvKZ9O+d>QZQwRw8)6TRb(m|pyPwE>sDACpmyf1ch0*mg`g zGI}3mJar-iB`$E%_3GXlVYjM-%~tze`y_OYI)^)E zUPMovaN!9|)(Jk!i^0^<@&xS~m`VpXu)(7JbO|L$K|VuFWUd_Bjt>u$xvcf2t>-gx z_eGUpdiwR5;|fLGdNWHB%>p=#{S+*etn6j3K$Jb*zVO-8M1G;-ellfF(RV_cmL;htJ1T}L z`t<%aySyK^-r}=sy@dj3^Rv;(i|8+HzUbYumsw`Q63Rr+sF;AJGA%d_7wjpt$8xg; z*9fv_3pGfoj>{+|>Mb%qeCi$l`K9y{#X~8rfHb8vmL9R=!eL4&tN&@l+TzM*A`6g3 zaqLTIAl#FzzgIF)>uM5=WNMaV&#m^@Ju*S>^fFSlXHM_OJU^z*Vf&I}a;I!nU~W^& z=JWzeEq=3_q7x^nmd@n9l%h2$mTlj5eW1=sn4}_>A_kQ3pL!56pi@3Y@m|R;GCrjR zhQEcoCsr@Pp~wV99k67^B)x!8*B;2v*F})E1)7W-oP5gzSnkFm?bB0#2esRM*Qk4) zK1bzCdZbo=FwfjV@gRDqAC#m@^;SL1i=Xrwd}%`0KgCkv8A6c{w*+)zhjIHOm<zTiZeWAml%$#xq z5ngpQQBVH@Uy=^X@`czZ?njv9E-VvY;N$+vSe+KUWC{t$-v@Cr~qBLU{NciY! zl}dYTDFejBUz3GLR1x*N2uxVq?%<-Vo4?NU0zNB{QS3OLcK;>aUZ~t9@mTSS1Wkov zzCz80HuMV=NmEL(NjGT>{&_0mvDjo4-3zh$ z7m>Xg+x;{WbDzd#>aSw;=sbFiFP4)_nJ(fb?_~?iL(9ip0WNce7OVf2G?+KAPo%)q zvJshTi%1HY)*An|Pp8y~OuQeigUWd3FI(td6Det~B;P4fw+9Omp<3kT<4@f|x@cMx zE{;pyt>gns-tBp=Rl9y?tvai}G3H8;EprH!4pb9u`?iWrAK&lhgZA*4n@{S=&{Q@k zY*LV_db>*^4f=KDtkMu>qO-jCzAKNRa~%6rp_9IPA3?RlL2fE-=}CP(M=~YCT5YfG zW?y}3M#aC0O@1L($Me*QNKZv&`R->X=-*QaUnR&PsnjNm6CbC939gz(%efMyg*!UR zXFeVKVk;9PiMhKnHuJUECLM2+m_vj_j_M=Cc|TTSnEE?so&2~6A?o>0ME`hf_ag|m zedHLi3S3Do^TJzJt)pNQ>#qJZC1PL}vv zvE6TCdlPx91f2Q=nUGTV9u?h5?}X~?9uoZ;WwzHRnL_@;1!N$$xa1pnhyDyPn$k-M zW7R#qgRw7Y_K(dh>1B-02z>oyw=9TH|5toW{4)in{;knuA_8XX??oQ$1EG88?%h`r z+VyUN+)G##!S|EF$EavZdt%KY$Y}6;gtGhvQe&UjZ390bU0GBSTYToTA^`RPB}vQ_ zr=Dg@D_GsLl+welo#ODY#;1<&l4yn6rbI73>0f-{rEk#SDSmeqgwPFy^5Z)-)=LLS zr^N2((-|sg?QtTW(8g#JEg7`|68w85XC!&s+6{o7RO8* zjURi7E7p400V+BkO}ptxgW~J_7$6&-^>5klCh~^2_{WGz{$G|-->-ch zNzjny{W7=5Z=fYDeGaUd&#u2ZHuI#HLAt70Q63a}c+))*vB&klC&Q1@DyhGhyl7&E zW3|X3qw|jm3*84u!o;0~ybDe(;2}2XV9M{TmzAM?4I6@vawSH$ue!(6felp=Lc)NXvFaN{_;tdk_d-B^L+ShJM6x6S4O*AcEyLMem zqG^@H^d?$Xtw>z5?$WCh>((Zg^XC#`qJ9%Xzk(-HiS;X_anvEZG$vLeYsp)imp4IS z#maT-S9qGM*It&UIEIg~s3$?kJd!f})H z4>FE(5HN9G`6+DhT4)0as(ti^UVlVpqsJZ+tlg+^*eEl^zuP(cd!f1RjrN;A3x1g) z;SYKDAa-tue+Y4r#~b3`XfA9aWQO=Rn~Ux<=F(%o&HUpo_|Wh@=FjzqoZ-WznS9~H z{jz-NOECG!9+rihrB==gWW32>yK|`1hNCzVa(z)hPoDNyb`>x9Gp*XUd$yFW0^BQuAMo zf3Ey>oB!!~{QJ#6U-{O$)2xC5P4v0yzm|=a%zdOhSNam{O=UP6kr|S|QuF^cp1J5J z*y78mpXc(ATg5GOSVQSIj^Mw|{PU%+&-`yB<+;2(#v zDwB_XqxoOv(T0@2)E|Ybz&3GCKFlm&F7mDfFnXU#V!J#p^?z2WdwHn$kPi}-dX zygM-K44~c}^ckLw$2sHGyMvJ5A^BL)QFtR`rs(P2L7->NFeg2|I|%eN&pH#*7on$j z2cw~Q zP#?qLJqq4v>Z7o5boC+G*r7gbSkKv>F9I*rhvxl^{6^jvNfuA3m5b*847^CWd=tEl zhNpEvKD_(D+iG}2+ChZgAHmyacv=@^(2Ml96IeTJ`;{O6v_8ndtM>XMX5d%>UfrV} zFN~+T-e;`=uh#IiUT`L~gGjuRSyc3xr>Av8KD^t&>oYu?KXcZ{e((;D0`C~sLW##m z&c__^rWu~r75UQF0ABkOo}Shh`S3Q0-jg10xO{vMywXwN?FDbuDDd6@Z|f-VX29y- zZg{p1$yv^lSy1ql&&OWNZn_;r>R0C=+YL|a5@$j?h_utMf!F-Br>FHvKD=F`x8LJw zostjlMeuq|FH5DNrPF72wdcvKX%85lty^;D_YClAO>c{>UvlDI3f@N3!=ky}nUG(z zD&8BwJ7jqK%{^E8ehA+713tgDt{D>VUGMep@#==P;~zWD7x1GMfVb*=uR>F0PAVdf7RgEfr{rk zpyH8U62;R5R6Gp^7a3dtR6H>tYoU@iS#VSWe-9Mh+x-G$dN)w?z6un*O+eAR*5H)} zR{}+E7Ettb2}SfK0Y&dgzkis1Cs6c$1{A$-14Xaf;Qugq8BqCI3>5w+fx5GBF|0GcOrYT)UhB!I%7X0W)BAqoHAgDm)EgG+$QM;)*nSO!$SKVk5r2Hy)*xW^zW ze7*lI2krz4e}};z82l>4w`!3b=)i<_{SxHWHqgCgkn-T9M=yLB*yg^>^9hLu+d^9hLu+dFydrylqm*JH5TV7tLagQW%& z1_3VI|0W&BQ5WHz->qh^d%rMv>qa>rM+AZY@gQ!p2Y$zU`IbHKH?-!KJ@7NWY50ME z@q*a{zhXQ1dXF6VZxe~%y;t`AyFhzL*#mz}@+xHy{5UBrb>ZpfGU^Yq2Yyhwg%A8A z=?8NDM*lMM=fX2y%A98Q!0-A#^(_Cu-}>v2KE`*M-44*iBFP?yj!c!=XPNzC3xCLatIi$1+MzQ> zFYt#?G5>I0aHH7+|Gde{L;Xi4W%j@yf70^PsE9ECWbv!L%Sdjj(pzeF>1UF?-}!PU z6DWJ&m-m~0;D7%r&@=p>8NTpjB)CoC13!3vzz51aXYuy~WlrEH{2ucc|4a6EOWy^C zANbp?W>^20dC>A3&R=dWHve~RK{xd_MZ0c2pM-J-gjRxV$?#$iQL zPuZQfZv7R@orh0)5O`tTdQtPGD3wZ6C&u!1Yu2pZz+Hrku5KRmfYK0;bd&XkEF#wK z1|8D!ZN2g-i*^3`6@#QVIKr1YhsbAW)EDaB1#%CTZD?8EbosKTRhKWjtabVNONlP6 zwklfnY0XuUs!zLx>XAz6pvx*ml;IXB#Pa3nq6)|nq8aXih!ZrbHWnd3*`1RvVOa)k zj)vJYLzJNx=+BT>`q5M8otkh)@=7mUeMR${6*cQx)~(Nw9+F%BuUiu&+_W{KywY~o zpfYjhADLihFXBW+2+E9Be#m!h{uMo@pn|Qe4`JEJ(k>88T0X}d?~*N_L%L^WL_-$KJ?%Vr^c1lj}_mgRP2z|qe zD&-z5LPUGZ82-2t#}c$|Rhayc@XBfYk;o@~ikc$YF_b)SAU*}y@fp&P_wm{$CD7exPnS>R1ybt= z(qa<$n3hhzFD2eS75VomYkaI?gAnU}zz!|#^TcZMNz?K$qY^qFCm5GL^+@J?B$h_x zgE&DZriZAJLOfFWnSwBwQ{%3A~Xuzo@kD)q~8saww1gyjg~@b5q33mWw#%k&DV9~^;v zOtABtOnI1*dE#vrg&Bz{j}*-2)oZhbUy=>j>N2#8Op`Ec88Fv9k!JJ%YhbQ>M1AIO z*ExpJKV<$%4~O`NadIvGx#AD|@{{v~?>CC`^7togw6%N;iGQp4a~vWw#NWy-?>&+t zlYy7Z1hy#&IG*3`SMM8G#Z|j`yf3Frg`8teszXt z<)0I8KX^f&qw2w#5N{-Xx<|6d=vjT_q$i$hpW#`(EE&p&?vc!T z!=H;;Jq@AvP3n<(ampft_Yj89Dc=Dyr#U_`EU1zju`|C-x!z#A!Bs$x21=G0)awb% zbmc|iPXQ|YG@!yu?xEm24ZiBo3#LD8@Kzveo07jX`&J-F3?=87`^U{aZtfbJ3JD@R z`AF-v78+3;m*5|Ndd%LB zo6NWP$v^a`ADTV%pZVCu=jj8=JjYM=V3dE^51GS9%$_j2Q03oj_RpHV)M#+5r*x;y z6Iu38XW7+GqWF8W>~23XxVq2e2MkrK5*c>==H4VJ=A8y23RSX2C1z|Z*f656#Bb&X zlfx#*yDo2TUUPNT70s<{q&DTU6)ov+=i|0Nm!{pC26Yuj_I870O`>Ah7afT_#na{m zg(z-cv}X0CE6#Ol>6&J)qiA!=Q*>+VgnUQV-%x5Bfv_J6_CI$&q;oHsupg@B+_hQ` zN4Ou_YIF<~bTb$*uB1(LEiT8A_Cwu9sMIKIgC6}pZLAp5_L1Zj_8Yx~g*XH~rAg=H zQM!TPNc*7zJ6HH;3lQ|ehw#z7%Wb6n(5*%<6xwzML8Y&c^u;~V43Z=5hjb1rbBl%A zPJu=10Pj^E!~fU(;o`~K57jbZzZ<_E?j>k`5!qTF#O;3=+cjQGwy)b4nb)Yn;C|>9 z!sOWxNq!jXRXu=5?7fq7gb0&iR5>{59+S%JfQSt!XEAK59aibf?FrWOcHCg8^qVKi z4v5HK3vupOoc$)orYE|8Qi2bNM3ze7^!|z1dx%}BK#Yn{g%;=KE)^nNo+A}ubG6B( zPUVx9A~CA{Rh#J%{wIb6_E$Xsb~-x09!^YOke8+SoV+)QYsip+(29^Y6DOG7VOjY~ zkFX@Z@&5lKKGt)6tV+X?>Je^R(C8>V#Wq{pQctN)l)g%l=wkgI9gaQJjTfG9WR^Z>e$MF;Qy7%+EW#uXQqzgCVyPVOgZB=m$ zfd~z}n5NH9<e=Aaqtp_L^JYB8|D%W-wCZQm<~}D?DULaFY>ziG+dC}_gw|& zvF*VGvaR$jGdK{MZf8W0FgV3mPbS?;w4Ui6;>UB`1}~)`R^KeX!lO7)H12Wk1!60# zB1j#1tK+e6eC!XIdq};sN(Z@Y5j7?}isdOjZ-*7W5v@y0{z(HeMGgK zv`^gc9!019m z_{ZceB6WyNXppUeC-kcJdPHK>Ihhk}?6Gu2dAMU6gz#tZ$JUb1T>Po6mVdRIT>PFJowhyu2n zOTPHSx;kI@TE+pHeBpb{KVSH;AIlfModH-TU-&-r&lkRwc~RzQ(vhot!@ZF2d$b|t z;||O4TkCy>`0Ku-%ybWi__GagCZ8U~xqtM0r+}A>KUD#RS%#;4IurP3k$dlJ@Yra0 zTMR8tFQQNSCj9yhZzTTSKEt!}AHo-#0j>Rt>t&yh;nFAmUefS}qbHtN^C;+vzqfr9 z^tAu#&qpu9fBYVJ#jp5$441yW;ME%5ko-pI>7CduhNt%DOpbcfJF#}tKW^dF4^Oj=)D13;ga_O@tX2(gSrPM`(cQ&WiR=y!6$*3 z>AQdme>+g&Zv_hf9}WJU!Rvv-|141Wx>qLrrRKlbV6DNqK*e{8!4rWBUkFtA0c8?+ z0I2wM4^Qw{1|`x)__|Ll{2u{@{}1MWvqAAM74EY@#V38^f=xh$uK+6i*+7La1`7W~ zgYPjYd6L4{eN5rM3>5z3K;b`Zu+QKQpyK&AgWmuuy!wK|Uk6lp@ud}hxxr5vTmTgQ zhYaq+!WdO@k8>`V-UH<6Ldhr1eSx`)7b5qO_|5&$Qt z34Su773EK_HhZc0&kO#(UR4(kKg@UEFngFkbzbA>17&nRB70aL=sdyMjsA&d5A(B} z6b>_5)3JAQb2@dQ`e^b%c|c7rE9#4Rt| ze8XV4Ov>r2af6!9o#yhPnu!J}C^cRu(V&}B^R{Xu8jNc2@>9AjNKx6^rd8|K`wW!zNCrB~UtxrAc$eEEIRhUA^o z|F_TdpUu_}f}QEebv4E&XGVKZ>3z1K5k01sg5uc)1-}u6A$)o6)h&0V-M?kaD#|W$ zrR3cbfsUbUWkAyuv32gC?j`ebU?jfxR-^YnnMa-B-CNXH_R~%y@x6ndqiz)xW*hGd zl)gUFccydEG(BiW;(Pbc@VL@fEK~a-PtV&N|9VyU78JV1`s{l^+ZjlNIG3`V!`K?- zd&h9sZx%nD4{8iMQX@X=cD1L7o(%S<8GHwJ2h)9eBBaq^7Qw(_}ypQVGJwS%9@ge~jVsG2$Z3%Dd^R{W;w#VDz-qz!7Mc$@#LX-cZ zxlO>AK|1P=TX7t;9m2M|;{gA`{HdlL31eRD^=nk6c1xRZLAr=LI}QsGg-2789Zum< z0W9|3_I6xls#8A@LRIP?+5wzVIEmmemXBqQB_;JNV_@;lz&5(-r?4we;boL{o+JRJUQ?6mcrS09~_@NeSQKCRP5h(I-#9I`D_;c ztij+#E_mxZ2wFtYgGV82Pr=%ncu<;iEQuB*RCu zef(@ohz$xGgX7jg$DiH8w^D}+6W8+tj@-kyT6``Xxd)tE`JUY)tSO=Y{M`J$D8FQ? z_pi$u+^N^|SYcDA^>nFz7EwdBRjG&F$=jPQU`^)=D(Z|G1#L5C|Jv@|RdrU(a1~aa zdaG>Umr2!F;S5#TGoVvtLO)69n-odG@c6aWsVn-*Ityn|Z}Tc=|7Ioap?ZcY?0IG6 zy(_m`eOYY2!VW4#)xce@#_qr7K38MO&TISJ@dkNZGMG#C2OHJX`AzFtn@aV&oC5vP zh$|U8B}wCVj@RVj^CNnjUui2$ecW}MlDO+Orvd0TTL3%$K(6y1o&`C<3koCi5%WuI z(t^V3&Z}z6I?gI+`v6To#8=fhKdXO?bN$0Kw-~+nf@31|9KUtvdd`?8$ep3=c%RH0 znN3ONdz8$H44Zk98SQV%FMM1nl1rC|=w{mE3y{T|;h$;G)C;HZPHJ+6A1_7!gskvU zd#BgR)~@!X^rWsz2s>@(9w%zt2HP`w!ZPiCJXDx;dCiH$*KvEdNPA^Zegw`~AGF{8 zP5GlR@AJLe_&C_S`+B*INza7W_hZFYERec>pSLBvt|9wvZHVG{53(n|dh8 z%1r~YFYiofPV>ETY1uL;c|9rap0w9g^Jj&>n7Je!xsO@>!4GS+-mG&f`qvTRyYay< z3g=P^z9c#q&Pt||D56?e3@ipFfC(TfB$Eu@3sFRoMETUalARY8B~!KhifkmwN{{N# z+EnZ6|FWj^6W3y5-+v&v{rxv~OPkg}ayG)ZX+mghbJi}`0HiK#=gL@f52rcTsTt*P zJuqzBNv~%^^BJ6v)qib0Krzg!O8t>#ftw_%=N*b|>Qw_o#o6Xx@ln?Cvu;2^Y_qDM zshFQds5;e8b%|>E?WQmaT33hlO|olYX|n6W zxgCdGTH^gajBUqHLvE(}a1*@W zyA|%X;d7JKUqX9vD)y+sBG*(p$cSqyU*Ti0sc2xX<^oO4=7HFzA2>_Xw3^NPW1GGu zOUm!3(zV;!){F*0Yd0oKzC2Nt`uZ(kS9NZhA;<=*xGMEE_l*J=+6S8izm!rncliv? zDsol%cgkR|GXF{ZRCyGPME%eNUXb6OP-t&bBKRFJ%&_})Bi7L?h zhAFh6<1@W$T3WTG%U?3Jq^~-4?Y`<%Yk#uyr(2XU+iZ3%>T@W5B^A1qF6;PPQhD3g z#YObCc=GfMi(B8NE!OeL)61u|OwtbL!db1$qt;BkC%X@p>-m_3i z=qzup>ij?LeGPb2)tUb&Ur~`86l`pX4mGudl9(tW5v?Hf*$L|r!vM1HMQ(I9iO^t$@o_c6yV5~1l+&DHJ}XH{%)k#(Qv5r+i?^qR%I5DX0w18s1}mey|R!zj|!SLb5zKzB!AEYe-QnT!cq=x z7w<3BN^*g&UFjTTf;~s}^*JpqmW*eK@kJ_aVv-GBl+4cuwzO%F? zCsuCO5)9uVjClBnORX2gnz2Yuz0`BhT-B4Nw)=H$C+brF2d8z+3N*YCQtA|HS6M&6#;? z4y;$F_j8W#N50Y36ev%wYYMb(@~AJG)c0dBhu{0^gYH@N`51&P)4dyCGvD2MyO{A2 z=bGPYe`ZD^`Sn-_`FbvSI$bTj`x>k+#yb2Zv_2Y|>Oj!Y52Ay1-8XzgXU-3{u6p;R zMh5JN>um>*1?=Si;qYP^Xf<~h!cd@8SkgZW;T#Nu{U}I|E(q^;QIHE*5b_QWGlunk zneX$D?But%BAbCg#`ygh1yO~wlQ%Ze4DW1Hm*~$?s1}Srv<{gTP^kO4dW=vgHLxAu zU*`P`Ti<~M%;><>DHh#u@-rx|r{w9f#9(S`me`Mvz2J*FD4cj(jgwHK#|*@F6$j+N z>5f!Gmwq!|RTR+c;~2b-ae|5gu1v7WTIm`uu;gJUJK`veorE>r5H{{Sa$Pa_TaQQI zj;H^#$S2~`G4#`k#34-sGz8SpGC+&>bKc_r34;mx%Ec2(XXG$B(2&LEKwZsR$mp#W zQw5$f@w#Ibd0Los;pZT?54#A|K7eQ1eF!(e(885hdKWGYhdm+c6j@iZ#v5#IZfw5X zJD1iPjAezoNK3=&b&xNq^XgQz1&8(Z4QsTGhQ>8@u;&l~wqea0Z+#8um_v)VCJJo< z^^rQ1f&s{xh4D_k(yJbneTe!R+EZB59I1g-h?=@OkzGBZKTLE)tS|aLbm%P(>;ev05QnpcEz-W}sUX>Qiox)OnV$ zu#HVJK#aMIl@V{9YLc2&ku|q@>tfAp%^IN5LP!qcJ4|J9G}7do=51_FQ`{1ZG~ZU_ zt%yZw)}jSgE)b=~3;h}_1T0rX3tJFN1+RoIh9b{O-Ki(uw2biAw5%he5gXQ||MA)t zeb^Fhu0cgV);LK=`)jI{jxCvvSg|xU^ZIzztKqQcWb>YXzIUbZc;=>RP2(VD!l>jm zH5;?YBjW|sQM6FYVooQY8i>>NOqu4Hs|~G)?G%hx(qIhLM7`^4T43fx%@|HE&MC}R zJ*9ltDq|}MUf+PZxwhuEm65BasX@g;O2)WjUYuG%bjI!+ndUG{1+29=vUFEw4r*xX z!rHnMuF>nwUt1Gb)1@2Sz6}O$8rIcCHh3FXem+tg zZSkhpQq?OQ3VL}d@-C~v8W&rKrByXyZLGN&>V>>&nc%{q76Z`NHd4z-6f0ob;lq^< z8-z@kD_-oy>4xCFDtLH#Z@=KDVGoqeu7J7c=RGjoko4n-M~7>Bx*>SO4^uo0{;0%X zH4MIbltxfb8QhTcFcVK3Jp}K?mY%L3zo#n448a>=E_~quSqvt{uRf;S04x8 zbR2yAIQWj^;5(0l?>Y{?Tk!ZQq#M#deaFG~3x2rqbM!cPGjP-yZ2= zp0|FAM8nko4r#c>=-F)R!%>{<(e1`BTlu=BW6mEg{sa}>a~(i7e*X$tIPV`O{iA{( zE`2YUKj~zhM=3I0vEUy=aJKT3xsz_V@!=Kx4?vSGKJ{YL4VQnv;8%erYyBl-X{I6N zuNHg+@w2VZlnbU~`q}#54^9a>@`q+Cf4AVjHVnRcGGlu@?4NAogG|(P=V&mb{F3~z z`anD{=igN{7Xc|ym1fO00i`K@EOjk$O9eX>s={f|JiRqQ(SYwC2m3tGo*8{3|W!E(F` z`dKgQew5`VO)v3DHy&;66}k)E={n>LW`NEobh7+rO>a5qa)nOz4_WE9IMN$woPB?! z^c>^j*%M6fLq~dL?)o~~r2uVj+Ha)tg+XW9ZzQ@X=yIf8Mxy&B=#EN1k3>hAg+nJm z_d4jhPk?UHXpd*d3D8{ux{ec|s{`Ezp_A8X)^V^6bk!$7_ao5RLO0TQei3xVCqOqE zdu(GTMP8R#%Qu~SaY=8a{#XLK!!n;``Oli(M$q*OU2=r+_W-6}~g)jy7Q{1NDO z3Z3lBhSZn+_#)^!g)ZVwFUxy!JQk<^;qrHk&l#Zei9H?e+my>v@8zJ23mx}w+2~l# zEucFlbVJ5Pmj3<`=e$-v{im5U@gMGC~y;CHCXs70Kp?) zcs1ZnfHMH`x|m!j@O*)F1ug?z0RPp1*8t8DNIN;q=WRgd^8z6Ac~;=#0v{2$Q{cY}{EonH3cO$7 zWYdelfrs0M`JHN4s4M z$aY%*xD4QpTz$if!`E(ufTf*#sxMDyjftKK-$S!ht>*MQ7tFCg>znZO?l z{GPy0fnO7t6u3p;CV^K1)*!t%vC&uzNR}?v?-@YmdmG?#z|RBXFF%NXcvaa0mclmD#d_~}M0(%7hyTE@ISO(}vy7_=M-~_<=fPciAQwI1F;9S6e0h|Z;cYr~_ zM!-3MHGl!Y%K=%wB0!dJ5+IVwKLrqf`5$3z#$WzB_=ne0KG$@X_a6jq7x+bi8wIWt zSS_#^k=gzi0U+E^w^C14x|hmjEO^ZP}52EgR|E~bUfKLM={*{kN_=6JuLka(egx@Fd zZa}7cyZCPrSTC?j;B^Aa0at;(OyF$52>f|~toQS%B;h{_!1N>;SArKNbV}5sqh$>j|hM$Mpon<+z?;1C9gq0ip;K zyaMw8;gnuX!Z?V4A6qTZFVHK{Bar9hr0W*gDKIXuTA*K`SD;5=KL(|WFR)W!Twt|8 zzd)}*kHCI(l8P^|Q(#uRxE$esqe8FR)W!Twt|8zd)}*kHCI(hKet+Q(#uRxE$eneLB1$GLI3#=CC7w8q}5!jE;!sFO(ft>>50;>i31$qSnsCcbtN6Kg$ zHv{cLf35_43;jgDxv#20z3Gpm{B%v??-qYZ{On)4Z-I6KaFuf2w^;Dz{QDZo&zyH( zC4O_h-7J1{o;?X^F@JM@O~xns&3Q2O2`E4IV|3)Bqu-o2Qs07wFeBI64ix3V&3W}N zfK&3}m@IVn07t($ul{?%oAdtyv>);2Je>Lwlpm9i?pCw|{a)qscrF8^-<%&8;F*4N z9{dZI4}Nn#{aK-pquuBl@Kbo?OLvvTH|M=CNPKgC{FLC2V*f#RtCTla`e%WZw-fW3 z?%xF8E&j>Km-)rTUnG8We=^$SC+ST>8l*S(Z_}mzeu@8)l*cdhMBz>>Yb5N7MTH32i%4g2A@y=6tbAG*7;+ymE+XZjV|JO-+<~*P4 z4%0XH3*>5~-`t0NS@7n5i)VSncS!l)lJ+zAhd?QOr?dz4jF7%U=nvyr`33*9q~9d? zZ%KS}-}|P-KPvcLlAk$`=UFoIG;ST}o&Eid;{fo($7Qvo&J6o{s1cG#Q(sBf5(OAe#=R}663|`f8K?k`p>!QN4s-Q`tP{fn>>+De5YefLbom#%@|X8GQV~ZRG>XqF5_Q_^Vh}iL+(Ax5RU|RoK4g$lDjyhlt!5oj96&Ae zpgh8f41(P*BS16vWCR83>N5OLE0JdHNoAA4@WaqRb92pYVgt*rX{kpv@u?azNc?l= zEP-VqCsIAvztOyz1*il}WdVf^EL9fPDl?cB&{fL}S1ApPK+QABQ^u6+ znss$+V2miTswTEZm5DhRH6tq3439Pu6=+^b&QNW>O1e4C!I>&Pn$j5x)=K7u_FK|i zvyPD)n{LzHnTi5rs%&!_YSK9%Ef=DN8MB2{5;`Mo^Gez|WzI^mVwy6iLiGSe(@5o0 z$xEB0%A{IPtWsscEo)d)R||_!Zj`esi`O(ZrP6a&We7rZIV}N4Cs`ytRkT&LthokH zQp`CK@TYpJYIGMMli)3DJXPtoRbH8WOV^Q^DwT0qJZeOjMaVR@XyxaLRv{I!miiPe z%u%8DqYX7{*qRKMR%MH)qOf!(Kn)g@M>uj*DWSTKAa^U5H7*1XDtJUuLC2#Wj}>70 zT->m{bKY zb<(_tsnFEOV@P^hsytIfdPb(gNQTjr@~b?Z0YmJSsg6n6E7KhkA_tubGh^MDG~=Yu zxWJnAHMcpfo0$$ubwLHDFqoku>uPm#F|KoPX2YWa7q5v#nm9t2)Hg?3>cIq^sxM-X zfJNL8R)ED#kw{(ExFcXgEgZdIJ65ArEk8@wMNxp7OjB&ELrUe4UXYQkvH3VJwyxGw zrP@C;C}Xf_Dw#uONGK*y)7ODoZOBf)KT_34P8nw0q(PlwvJA}yH>6oO)QncDkg_0C zQ(#yEnGwU`&4kdpmN+BONpsRZhYh$a*{iZCwM$u$sj>}AAY~g4Z^{*!1D-Ncl z%o#}@Pmfd6L|u}&Ne|}%&N|}kw_a1|{{;Z52rl~ty~uwGa9eTM%5O2m<2jsiED(R# zBC9g;+xO$Tl-xM=lxSHuT3Cb51*T*tAr%^gIOcnY>7@WUm2L(^vqN-FD0!!C1QMa2 zpzW)`GRzTwHjD?fJ&AD8L7E7nuNg9Epq^z?2#F}x%(R>s&`zN*%3Apl<`xd~iu_gV zNu<$%q7Iy{^;SSS6ovT|M6;|dKU6ik!xt`nFFHY02;$jR+g%6_*Va~slQ%=;Ny{-) zfmG<`XCYw*@zpmJEl_152@l!YJUiI}d8c4E1^tZ*fZb3S@fH+Dgp!YJMWQ7Kpz{GH z7Y?cTf#m$+gtFOy@~6aa!-+R_>ZL6{t8L*Rlm|fC6D2+p!ZRwfot4Q==`8`)r|T0f zg0NOD>vF0}0d7=985dbSjF0n(Kxe^k&(*!FI;)(ovJ-O**` z$%o?z$7o3RKcw?^Agt$Z6Wi`lT6Yiz6X${vr|;>egXi!`#iv|Z=;CA^sdp9<6a+p6hqvH zib6?w?joo$pIF{qo?Hz*{<&ke=HRTTXt%ZHUyv^G%W|netY}YkEHs%vJ#ZevHqRfe z^qeaV=TwhgNk!^Q_mKcUXqcb4v{!38S_5@G&|3t(Na5rR2)3FvC^jF8cqs1J%gmM? zh@Q&47D6=`^{G!RPc2tg5tg21-Rmb1uLcmZ3+{t&qVhSEENzF>`A+D-!o1{ix2d-* z=?k{~(YkjB7B1$6YK+-|7pS%6eN+yru%!Q?-=fb>`g0a0XY_}XH~FAn3q#2agOkvi zBGHNg?o_HF;{*hTngr$8ZN!v7d=zOo|q~3D)Gw`KT+`q z_XSJ;!)lw1#puX4k&>ye86S2s$4=gYCFz=CJNYo9gxdqN?Dp$zJ8|1Atu?E3y)Qb> zZtbxL#$bH*U{PI!rnr~Hc5;^jrN0bWWrysGcDeF?4%eP z?e}^b3Y0*3B~T@oQWEvkaB|a5r4-G&_f=FPSn_Uaeb#!>ro6=|-(siKB5)PQNWj{p zGT?v=PJ+6N4y!2M1>E}eb~3($L{KL(5K3;UFr)+LX4D_=3xlzf-_S8$h#eW2BIB`S zutaMMa;5?0Z=urt*0w4%(!iw|>7g3-U3)u`b7*is6n{abVh%i5Th(qQRQiOq&4*}M zOMK}!Hcwe+K$+@b1TC) zAD*SOG?|@GD6tPshrJQ>b^Jj^2`6f++3;4|8Z@Ca{*l#q9-;kZzcT13EA}gCy$?w6 zRUARgg?v17juJ$V>?+&9!5k32%B4bCYn{sSb;z-iGe7ME^ zBs$pm@lxQ9*J_>0g$6@C*NlHqZt*Efy`*4u_my;mB$V7%(1|3Y<3h=M_+Xd9K+4%5 zO>Heg$!`{H1!iCZ-seVXjEsjjk+qTfXNH$ZDpbg%QcG^#fvBOxwgN)uzAK#QWYEC$ z^27s*HiS(XL+G4@=#&bR2c9vMUo&MpLRxGlzN^5cj{>0SyHWaGSK{BmI^ceT2XqT} z+ra&vI6rYz+f%N)?8_Rr4!&Ih;;6al8I8MDxt}4DaMmpLogXnQtYIwWd*|er`q8oJD2VS1q}|B3M;+{lY+bXzu@%(g4SIep-q@ zqNVr)(P(6CQ&h?ELtI%7YrHj(1zuNJciXy}wGFjOwwCh6j&s0aYO;7qUAuUv#=_22#D8sbz(4W18L(`4Uy&|NTk~$h1wf^4yjCV=K);}pKXym(w&c!%NDAappuA`7K*Inw=Oc`2v*Zl{?X1t zHn}iA!s-5uUpBcd|0sp_90JHDm*(Xm6&(32vZkM-@h<>mjgRjlIv!YLi+>a!$8>W1 z1S*%~0S(-9z+@}GIiqpgp_z_2Jm+b8120iHwvTd#f4V$Veu?y9{NhJ7J=;q;L!X5o zeOI<~uVCVy8uJcWeNg@p$Jagpm*S)N+~ncl^Kp91s(B8$S)1V0F3jN!sZ0ZF$4knyO!kbd&F;_u2O zCdVWj7nChV+v!lmH?g&NVypH8~HMDgk8wf3dTzSGM!BVxszi0^8qmg z3#S2+4r#0Ken2EKwp(DQz_`F_fqsErfdDGr9f0I}^UHdBj`+REl#XBK`_5J5_L9qu;`FRnq`o1z|TBo&kXsOmE~EL2kMAb-KyGw1@G_=Lo&7dvs?RR>#1r zK^k=(o^^+t!kVo(0hYXca*^1T!IdT4@$NBa6weg1HK}{d zvdGHVYIBGAU%kI`AN&5&q$A0BD)3U2rHiR? z&CYPVZv>ZAD$IQ!dQ=kHAQaU|53itM-SO@(>t$W7mJ|*lJ(g)FUP@9nXK^vwBlT6Q znrqfZbOd+#dL_LblHM$|o3oBczFtrY6yQJJcjzSDfy@m16Hg!V$DgMYFCU(VAYSVJ zlIiisb%%AAEb(;W&V4_DW9N5pK9`*9+i_CLU<1xf?8L7RGgTr^9u6_u+VV@#gp$|c zKx}D8@?@L?-MbGVusX81(werk3lBF|Thmr_LKQNuC2p?A(Qn3is-0Yb^W`aTwcb(b z*}MstgWC~hZoO664TI#}frr`cG^An9PjOgR4aM0wKwk_4u$x1^cjj1|%ZiU#m9+D_ zKzR#bUwLh}wfq-W<>OZ6K^y@G27hJwR&-jvrCrLx#@xzK>;74x(tR8M#ZI!|b~3iz z)(5&g!Ci&TJWe)k#|f_M{z~Z?#r-ezG2;~MFQR0!JXrvR-I2afaz$==a(z9{tvAn~ zj+%6-rx~mhuGs>E%lww_u;qIzlni>39^Ro9;_%#RdtEgr%(mdb`~ID5Nu+4M>Ws4+XJKQ_9ai`wO5Ur zw%6X>KRR?0VxX`6eRg8bVZeUCqku;NkA-;ieX`xUdo(UdyrI@^f9u{4V>IlW+qM;j zuzclRX#Q?k9kzVbs);tp8@LLm_s~F0E96)ERh_qkR@Ip$56_PD#n7265H*5^d(Uo< zD2>AFb_aFs_F32Ou__hbGzFR5ankYxp_vXvFEaA;*+xN226ECNoY|5Rq* z&-w*yrdySNvMP^S(_$DiPw1ZI|Cnlq2%F*NYQ*@9b^S4v3NiLul^LKPX|$orc-`!`lD)N%;NlZL9A$%6$8jQCR-K6mV=q?B_^g6n={Hs>Iru?8q8r|KG9~@5z`m>dP)vEKA|B_2C0rYp{r~F7CkS;UtQf$_; zos0VAjudjYX8EAlI}r)a{#g9R`SRwO5v$O_bP}GweSYipYejI z6!zYQmjfawpY1dr{;8_6o_xO!AL|teK)SI<0M$7TJao6?N5ARMAJC6H&G!t+cn)LS zPx0XJdT1WY>3`gXXE~ktLYE(BT^aalm;Y~EeiA#=OMNk`uhz2Wn)M99Ie|#Dgjy;Z zZf%S%XoQmEp_p}9!*Q68QgRtkaH(?v9)*}=0Z+Db z0X2ra$P5l=m!1t6v%|SOuf`ZV$;NNa1qkU*l&|?+ew@NFJy`_81OOqnvY33 zn0w0QOi}Ywe3{?O46LdWKIxK~ipKrjtr`Lt^({?^^jJRQ@EM)qj>jjR%Z7#ft_B`2 z(sMd@lUG%ZY>#)Rq*p14^ddbpp{L_B`rF=_HlL4oZjt**9V0FU@#gFF4kJBzCu9`y zc;^-!QopS%6kO-InSFpYuwG;I{{nz)=N4Pf$Cv;vXBv2~Q3AwEom-H#n?Lpo&hU*6 zPCT8s<9D1kg~pcD{3tj`7;0~*B9M5OJeRNXQ&*cBIm~PVkBs5}){n+o+g`;A7kK1! z?Vn(6Q#{&_;F^f|JZsxNg}+Gqi>+-`lo)uVM*CM<+a6H<-Spq}(H;P6+m}>O8~@++ z(cJ*nw#_Q&Bs467P6n{H-K>Jf;l+la8~|%ur4GWog+Tz;HgakN9vO$3!XN-^+r>Jq zVij~UfVJ&h6*RG01)Tw4ZKJR->e;P=#sXN|{_J7U>G6}8)&u}++iNOl42B_s#sXN| zo>4((x6e>F11XpcJ1t`J{h|Gp57`YEY-AfK;PL)gti{?2?2NZ>5XFeTXN^{LuDs zWR5%w{w=Y?7%ClIV71+knHvBHu@`nwn}Q{S>G?%_sJ;csDSsxT<{a`>UxJenSl!xK z;D>3@!QRBYoS0^;XNjIAA2JwM=jMbG%L`_exBW4k7>GTpQc)Q!=o!tS2`mShNxIOYo}Fx=nca4%K%nlavMG2ZV? z4|i>r4WF~ZLg%@rji~Y_RQ1DgG)^dEIFDTlLqm7M+!Swp(Mn5?>eT|ai8Afe9#v$CU)qU1 zngR#-_iF=eT%8>4;XX&5CFiKHCLzEDm}GX@&G9EDF~Z;9TYq zj&X3-H63=+U$u(%guMIUGXrLB?hlk6A^%!0j&W zweG9K+Fj=D@mmiKPJ2J-eKcS_^!~IDN`GzLw*Z)M?L2Qd0Xe1Gr_qi(!nMzY6H9m6 z+wIx|FxJ@_`1i+eyX@QKGYxjx4aZ9F?ya#Q{s8v*9U1KvP8<$d|FYXIIacy?=)I#b zXl*Cw`5^Uh400`4siWS^_6?U#wYK~-dn*~rvD*&d9DYz)xV{NO0WZMFdh%*C-_^Tla<&=h5`!g2a?#<)zP+x34|P+GgS4 z0NHohvxA*>yB{IH;o)TKzFCe7l+5~aJkfp{2I~iE0A&n9TsZZho+wB14u8_l89b1% zb0`zBFXu)Wl1}W`Px>X7$#+is?t?O|YcZ|mTo7^woX<+m;IEm_i_Cm}i^bBs|7Jd$ ziH3J@##}{>v+Pe(#xPlJTm~VQnS0Sovs62Ve&4StXxkVP18?iqkd};93#7e6Wz zK3u?I^N_przkh*w2Mdf@L!Q9;;y@1=x+hY}WEtX+*(_z;>gTM}~If>v_ zyLPvoXxo4p#tD=fPo*ze_f0_tc0+KhUW739lInUz-|Jz0QcD#?EO*beCe||*6xzaB0KS8KY}?Ht=!4fe~B@96UXGlrMS}h9j+j7BXL$Y zZenmdfVbE6co$Aw(P#PaKIF9q?tiA0$MH;|zWeJ{7SmtE__B(A8_avxT868T3-HE! z*1EqwuQ%V73!wfK&k@r|49e@hK+wv&EDMD z4i)3|C@!L}{}b+qfcq{Bg9?%?9z6w!y=;KElF;n4?miozN@bt^F*^d&djGWDWn14b z^ZpJO`k2|lj!!Cf#``J~~_Sm(1c5x2@ECVn<_u!Gui7iHo&jER@ z#iV3EV3^qryVWGWMA307tBf(gJHp8V%;s0w3)J<+GIm*8PT|r(Z2JuM)|ej~)WCIi z^5-0`#;vXe(*k=k5++rnW|$h7%;3AtQR`4=of%$rEH#t zHD!lAs-2U-D*6Ma$zkgYcVTT9C{x8vueVrRRd0=IjUodVy_XSLc@t-yT_lyb--*}hTlJ6v42Osz7rpYl2;V`KewrG zL^ZN+>X!m@Vw-yB`xSHefA{zQ#r?fg4itPhV3LA)b%+xuf;$0o*~Hwo&BH5XVz4`e z4=)65$8G}erA@uybIHL=k&||9H}+hZwft&)!7AFTz8d?jqW&RYjgRZE#>cp4!H2F z=|8Ogo3@79udBco4j+-+)9JN6y{C)oJzWzbq}F@x=bquB-4KkM{aiTtbM=-zw~TwR zV_COzQ+~x+sh2}*%e$D%dj5w?eb$yJ6NIomg{0r$elsu_%o!NR^-=3cu(ljTjBxV2 zP;y2AHebEb3-H$HPI>~RWd-A-`B=uI=cwHm_V49g*nJ5aXEIc~kTdX;a5BR8kKMka zFZxgXkKLj=FLCS_@y!_Gm#Eq=LPS5g+5J(06c7*l#d96&Ig?H7js1|RqP$10MuVB> ztJrvs_m8O^bPA{sW($mh*qrh!cGK2@8#`R9CelSIZ1b(GO4r`1zI=Q3@N=2bGSlC7 zrhG5s@EXn9x(DCOI)m~Z;lzb#7`(6NVsuY=GCX@zM|u05_zn*0ZD<_ZP+&Slc`x3MXUTdPBOw@vcDUD1HLUW-{0G50{o}BP};JtoU!2!c-|2)q9pSH$eCi zQj8GOYq*^X zyfDx+omadMV#;QdTkA(S9a$&ghQv4b^+6!B#rKa=@jQb_CmVl;AD0<)z4&F5YsrJ$dc4*HnXUXyWQ>5jc$oaVcu@&A z5B;32{KN6z6d(?-R4c^pj-hkQ;gPNkKU?THPL(r!Hx4^XYk)BJWMsVJnr1@o-6zjI zU51&5>9MbR#qJEpt#XFWAy@b_AdU(h$8QFm%bv}2AYaF?`!JR-IF4uKOu8<4K~;bB zM)eU*pSpiH^b%dwA9S|R$vDqiuQi~n5W1-n-(7!}^DCgM6grN36k-Z zLeKe@L7%0b%R%2Q^0AzMBhlZ0TVlwk6kZL8`_{r2aCuDs1k7K;4=@24&I=;2P85~` zGQ2?GWI*CSM1>iC6(EW@xj-Q8+t6Ps@O**i0HSD<#|YemiFrQae^21I0U57e{M6q^ z{N)nfg^5A@KZ6T_`3_*cL?0AB4+xfy!ahKd$Z{^g=RL(Ek$F-%kT}0g}EG z5UBiBfW)6A@b@^GAsy|fF#J=1tZx?*^8)@oU=HG~1Uv_RKOob)3=j+x`JV*DdR9oe zQZ#MhJ6LcC{{V<4FMJ6QEF*>F=ld-9=AO{7@NWQ_-)um1Md3`q^8n8U#88}^Cvc*` zcaa&(^(r9JDf}K9m+?6k;POiVan)CN1|aF4Wa9xo3V0qM*H5NP+m3|a71#!NHt@{? zR|8IkzZwwJI{#`wrgu3Y^Su(8eFkur%GQ&Q?p62-Ks+mZ9O%Lce)!RK6G%56uow_c zKEVfwCZ6C0M3YTG8-bld+vz~LCZMf3Zq%}fEGI}g#`<-6#(D*M1ooql_#4|Tuv1`M zV6{NMK(9cLz<%V1$Fbc4I|arCRtxkC^a=z}@yNS40exclm}2zf*N^hi1@WWb>~|g( zzuDjXo6vjF7<4PdZ{FXN#c%dA-vABMiwpe)f;aDTwhQrQ|I#6NvtPMf{O0}spOT*0 zuK=y$oBc^h=*|2762Y7O3E8cfpV^NrL;g;F%~yd}a(nSMVyovsx> zcvEhX?&p-hz~$cyVkbS=T{8R)E_|!Y|3er3cU*YCD?iFvJM;UZD}Kb~f76xTnXdQ^ zE`OgZK3T7v`JLmUPw{1vJ5n_EUK5Knr-f&=1nKIvQ1LMoF*L-XkzR?sic)u-N_PG4 z!^z!>q$#7OHNQ(ja~ortAyx^aGSC@9?b}M(b7);dT3@_Q$Q5vHq#lu>%{x*H%A40f zw@5~tfT30Cur`{)p{aO@R>Iz_Vpi2h)-*+$Jyo}`)pTm9Fo+}9+k!W`!l}<(D;-Bt zqH|oeRE8FDmQ^Rl($Gh0(IB3xvk6e~(<;SRL14LgRYoX@Xf~G z%eBqp#SaeeEYDWw#89E>e>Pq^bY8}RGkz|c{NY`r+==q{-pLme9Mfamdc2|d?t&*y zU|fnHcZLpe^W(-P9VwoN`w}UliXh9NN$$A(t{swIT-t*B9j4*KOIY%7CXe(+meb8e ze7ac@i+V+zWx^h+UQ_7*1ps*OqfvE4Mq|5dMgG{2cy<73qil$m;&;XSp6`71V;TAU zah>D*A8b8MpW*lz1Wl78%MSe+bcD zBtN&F%z}B;zBw*5dr3iV6ep^W+PnYYwcGllW%lmFc<7DJ#tHJ~(cs{Wp;5GOrro-! z+Y|jX&W+3a0#;GDAg5(AWQ>AnpUu2W1QP`$aF>wH>==sZbrx~x{jbvU++-&n!yOEo z8bZxDjE2%wyC?W88wW?P(WyB6JA}i(JUIl+L=z@8d^ z`Jqr^ArrtZho{efzK@KfyP$mTHC^PtN*vz&7QXY7u-V8*qodus6F z?k{)ph1kUE5sTaR@=h~iD`XZpP^A6~*1!~rdr()TN6e7%!WQ&_#YYWgoFbc{ya=Q9 z>FC(d>}7e;MUGaSYg+MgUWF{n7 zxJ$J?R-N3*Kfwyi2IkK_j z%F)UBbu5mts9!NH#KUZdh!Ag1dm!pbMw@|Jt}kiFdzr+Aq?DpncJYm zyl2aUwK9EQoVk7v9ltx#gjt6!Cwh8PbKTWqn&}~%x&CI1<{|5^W2k0Xf3I5{AanUK zJ9!gk%yn3C{g~`8aF|x+Mk}Gr-QN8sn)Ll>STDSLqH{SmbI@$p&9I6dT|a|fKm9jN zw~7v}$5q~0;I};MX(B&?hsW@PF6iF%r>YiyA^=^jWr?F0rfja^+N&v)cruj0T20*) zco#qkb2rxfq`jPPJisunwU*$v5UUM_vRZx13fML9U~Nud(YF(LEy(my?>4;92F^f9 z=TadhL5FJ=EIXU=0?cHgH18OARz^1< zROlD-;v{EhVs^a^Ak!}~!;*e$SAU|e9eK)*n*KmZjFan<== zKLg-?g`Ya_L;2|H@T1?XFZ;xA){DOrznTAS;y3g8OYrmj&#WJx6+eJ-Z{a`jas22O z;YYvuDE%k#`_ayH&G->-))TG^5|wDrkBGuwZmb1Ccz)YVUt10c>-`0?bg<5;ZdI;CxoB0ZLACnh4+LAs12 zk9QvBmGV?dtPb>xvyLc!y-rsDF91+o=Q@w_;xgj~~e0l#PL2-92-AbL4aD3G4&X&OB~KgvujGuU$bE+NZpw*XWe@JLOZRL% zqS?4u0kzRpjAyFZLssyhoxrBQGAEp9%7vaRa|qFO(!j|jlxa(SwUhsi^+CBZzTXG$ z=|sXjfYA69{~~3|DOEIh9|^3s=kUKg*=Pro5l^t~)yu?hTZ_7<(7&;8=q`y#gE!jV=iFjOMWLu>H>rC8Grp+rfbu+F%gkHVbp?p3%<}Z_KqQ zJ3h)X%fAPD)V@{n;R!+xn@Q_e8|Hf!pJYK;?I}*BJ+EEw}babSAHMyJ?0J^ox4A(XhAkp^zj9eL=^wES8q`S5n23`<@aY}+Jm%;}k{ z;tiCZNCZ_3e50FKls(4b(zlsqs`oX2B>SK8XZYG`B|2&6wqJAdUGIlZ#yj>5^WB(6 zCJxv)AAp^nvK)TwQwnY9_jKz=qc)AVllL&albRrE2{F}ob5N!BOTPpFG1b#?HN2|} z=;1`dGsa_T{NYT=R$qt^*v2u%2jOHP(!da0i#{b={N}5t^Fw?Yzsaq8EGZ|gKt_fS~%Q2VCs z>T~%0vczxIR7wVa1ku(l6Oml&u~Ak#nZiTKdztP@0iGLxo=3K^P97%?wNED&VAN7W zv9yYmYTXn_ZYk(M+Tgo|h`}|*3jZ$7Dmn(Q$%P_8tWm#L z)P@kJ79G3LBT5zI#px)6*W_*KHbl`+KvATkidy`RkBtk&@5JZ)4T(LdpHydBAUD)g zR#1(!V5Fq1ppp-*@1GnUPm?7q6sis(|9Qm$m_XTv=dxsEM|k$yzS!r=68#w5wqpf= z*eTA*a>pFNe!waUD_C&vkW0DOxpi(s%_`U)d@}sb%V90+PQ845`3ExOV zUe#qnd(d= z(PI{cBS;ID;oA7)Ko2*iSet@72IHN03bbzWcs5Uis7w0&t>3>_9OA+4vxCcW)H^PSPgC%({8<%AHS=uvPrpJf-^)P&xvY{GP@ehNe@Oiqfl-%s={nOA+c-AG z^V(A2OwN}wZ6^>~H~oB5pMn(?>)#G;8OGun(b15(4x4`m*#ijnQ?5=5qzb9~BcRcn z{iAWJiXvscA5H(@5VecZRq>u3{Dh;QAnMpn)B`v!robKYhuDV_JA{S9t7xKb$L0d= ze#-RtVtrKwN!zPZQnh>~fK3s4>Ov(9WyT}w%Lq7LAFRkp$G{;m8m3>@p_zTF(r1Q0 zMbCIPPaT?HI;+DvD@}P}#&}HUr>eq%#(psQ4ek%lj(IkI73IW8M*s21I(fzOxNx(v zxn_U7G58ddM>HspuuC7?_-obwpFy=!{cR`b%R=!6t)QiP`eiwRelv4EtA!4y4OkQ7 zS6xK&)h!n_!IDkQMT?`cy4#jDHs5^F+{W6*mWwWFt}BGW_2_MdYZ_Lz6t*|VmiYaGm(RN)>8ptinlZp+;|DiieUE}BYyNz>!_C1j+xfCrKKkY< zs-g9368sUQlP!O9{?v;2+448%MUMlYEq=FJV-*i0OE9GVeS-fG<;WJF=TLO+^J#vV zkRQHV?C41UVG+;dU!M*dOl!{}p<_QPXXspf#Y{Jf-z>4aBmFugUDACMKd;b9{|=#J z{`>GVc6`{+%9;GL@WuZL1cxPE_PcV1K1+EEkmgq5gXTEMpcj5~mNyJK!!Ir4A!~Ul z-gQXQ|ibF~M{JsM@$F6aKI3VF7E zo({UW&~ZE|XVP_*yBCKR=(EC80LlORH6+Y);xhq}XW>qKQQ_#LumcduPW}QQ!y5qe z0c!xU5zQ|L{51Si0H*@}M~>plQ4-@QLjFGZkz`>tAo+o5kLOc>^9An5`1iv9T|k_z z6@~zbzZ~$BfJNe;D*l%-ATcKjdjazRzYoZGUl+I)Fc!UCqkm(GfQmpS{K(MeEeg=?y*=GWhk9!;-x-b8yqc#8bR{&YR4kV5vrz=+i zGT#+|%$I!j_?vu{z*z#{Mkb8+Z9wL`4UpwtD}IVZ(%*~B&I9D#%T&OJ(5a;7+=I*i zGX9Y+4m|$GRtxkC^a>;re`EVWPuMN6Q(#uRs75@B4_X_=Fh%*M=YcW}QSI zt8?@|l%I~W73!QG{YQ5TXzBMWpU3kcp!3}QTjDqCGCwGZH;z1E^!H0Z6CnL&o&Sya z&3l9A@Wh*SmU?^XKPvIv=lJtbUZ7L%B0M?$Yg~BRM{?rb_HcL{;Ka{&rI+K1f4z(T z7cTsVuK4XPJkKMX`F-7mpY6gQbfq`b<)?;lXL|Rz{KPr&*SY+cy6E}I>7-BH3mDrp zf2FM+vZ}6ZfWTzP$@zQYW_lDetR#_U^_8m+!?en4mo%4fni@8Okh6oyHXWeSC5JDV zXj6uPv;iX0YX)Gl2B#`e(G2d`hze1Wwa2L(*XZ0;=;3Zncxwb(Jr#{DQKm2#=6F`Z zs!+PU>*})MGB}dmW`#_Ivc`pt(RyeE_Ea@Bu2&4l(irJ`8VLwAHLbZVw6-a>rX}L2 zqzYEnf9i%JL#x*{HY;itV0a@%)R(+w4UACYcEMpYDP^z7lxZDJV%B6bDYGkeVdurx zDKkatVku>ihWLJDlQpPF*cw zX271~`+xihOChzFs(FCdhrZeH@CY@apVVRWE#Fye4?{V*gj!C)V5+e_VW0D;xpVToU$>ZGzZ4l~i zNpHKPCtlv+)SG9*0{rk^9m1d7CGF$Ieu4XB-u+aN4vt0UkL6?;T}^7c=FyjmNG`sb-JWuQt7{148?=f{; z{vu_Oxl1! z&Bl2jc#TyHs1yeKr)nF*O7^4hb7HVq`TpDG_|-eXF}poW>S4xKY#2ipBC>%-eT`XL zh?O+fHb9cUPFd~s)_9FIWkp(qPRMY@@MZgsWjNhZ4P6qgZ3F(qD$E)tY`kpJs#}S=*&l&$;`<|nn z3zHtkho=G`zxYne@}3)6?|ikSqpp7tJ&po#o$p0@d>6Rg@%SEgN_zb=2o6blUVN0Q z^6A|{D%s<`=eDbtx8_w~B!0&`-$N(*p4*Q6`7L)0AGOseoAW&fl;U?_y1Dpa9(`=b zbzWaTai+)(isPJ@c)kPrY-rz3X`CmgZbGZPvv)F2FMha~_VN4%gS*neSOBHfCw# zq%!Y8rB|7X%FB|gz2u3=vy)Xm>It8%#BF{>9b|#QgRwWvom*PY!>(QA)f^?bEM4Y< z+VOOLT907q#nB05DS^@*5JFk_VcfrG-eXZu8ZYUTcJaV$C=$ojYwc0!wwxJAz^7D9 z+q+*ArOk<+a%h@{($ca5@4y(|;`!{_L%8>#WKfPZX}7)mmC@yi8RrJ9Gt17+p)y{l zpioBpvHawRSrAUn_myDhuqR!9TNk~XMaQlB#y1BFpv)HZQ0qyfda#oXjtvhsMa}q~ z3RVubs$xQk^MUQ_=2LO|Gx!7`ScGj&47y(b0!>=JP;Crld)K;`hK}v_DzHO*6d;>< ztWUKc_ASS-O$iJxWu?Q3JC0drLfk_4)$efq1$~;FN1k1rL9j0dV%(=;xN9xLP`w#s z@-G4#XrDKj2zG|raTNtcUOho7pzxr>pyZd}^u5jtmO&fW0#MS`6 zLT-2*u9qg3>UOsyDP0HSaK7_ z@_OvI2^fcA^koqT4scvQ@OSd%aciwBjRpOIfo-Gpb&CJa!Oef!vRSYsZmZ zYJO&x$5D<2%HG-vhz8PJXVq>LvpZF^4wPpU$^)&UPp$t1TC98hL{%!q@Sq9;IW{TC zGp>RdJ}R{N{G6TKmq8RPr+KXPRjpzigX4eP$$nAZTIuY(@_031wtZ}q;3I(9_M!cP zp9+{Qey-$**Baf>{3T>IklFUZ)q=lVMIRc!Q}D52;+y@*^~1!Eb85oLJ8?+)I*x=!zY z1Le$q-SNG^?|^!t<9JZc&^h!peFcavp_?jXseB#j{S3IBLMP)R>-Wd2pz9PmjuYif zzOMV40w5=$l}!FJZnCC(1?YMuU5+2+Mo4!J=<`HALdMgObeaEGKvyAjslAp-SF$19 z&pV)(J;R{CksHxs<@V~Q#L zG$`r>q{02S(ochGVmGZO-GpwG6Mthn1;zzd3-k;03iJr<*YU@83+xma7g#OOFVHIx zfJuyf8E^s$V!mUpq92HUKswGf`pr7~XYsQfbg$v3?t8@FD*jIK^FD)kvrb+kc(X3{ zh~KP(j7EC1?rjjiU)Cw!zYuTMy*%-ob*>mVevcc+{W|?#38)o+llXnWImkVJm;V9K zIq_$^@VB_|=eqFfd|iJH57DZkgPlSX4(hZBh$eIBQ(2smo+FOZv2sgGV>4timQa7> zV)cjuICSH;mVxm}^I=0wOdL%-;ftNZHAlYLELoOuHLI7b1R00S?5-(L! zf@Ys_()3h&($m^<-X2fWx3~1Pw$avhNMayfF5VM0;>eJ3A{t#-2#6o@Iisk z2z*;$7IMe*JOY;rtQOcVko>tn?r>xYbPL>$@EtV{$G;2wnZT&PCj|ap;1Pk-ra2sC z*Et-g3p`ig0)bwE$AIr%=Wx7m8t{Lb;doPECBpOi9FAsz8w73@_$`4y5V%nI{f)Sn zi2EsVBMT~jFN^z4fu~N_>6|ApUtp2IYXsH^+$iv$1>P-im%ymN#{~`xJZYxR-yDIj zi~qD4I{jAwcbuN#ct>C++6vug3G@go5ZEF4IXlzg*mYTk;{t(81l9=b5V%F)w*-C+ z=`{V;;rP($aO_?^#c{ez!}A2*G|S;=KWmC(GwO%!r&rRu6yddBnBrI=uwCFk3;ZtN zj>ajD-2#UMz9g{p6o2Lvtyeb=-MM~%Q%fwv0WCh%^7KNk3FfsYFOn&kVt0{=_k0|Flv_y>V+3Y>!e z&HnT>_%XgQ#qo;3_XVChTl;?uF#5eIj$DC70?P$93N)nNKX28)z^wwmCGbZAe=G2D zfx`li2|N|;fbDA&=OHc$vU!1l9@slE7~W{4arf1RfOlM}e;ioPl=5esGq+1p+@O@J?yZdF1o4 zDUM=+Ul73ZtR{}pP{r4(?O`y;Ayh-4l0>3Be{cmyqO5j0(dnJ4? z=yd-r!|`b;=jX+LSn&QT&~>U#=hFg<1l9;_6IdX0y2ZUz-2W=>262C1+);r?CEYK9 zpOMEi9A6RGCvca*M+JWt)_swL3pdcZwcH5 zxciDJj;O%LEw|A7J=}ez=;s2D2^>PZsi|-Gbp-1cw{;XXcht88Z60N9EjQSlD}(FS z2U|n*S=82WLrGnIldt32=1{Ps=32XFQCn+gsH3jAHI(STvZ<~;sJ)6nr=zX80jXMv zAl8Q9CZnsRg|z&w&7q>E=Jxent=G{VXlsLCLvT~Dlg`p$XJ_3y#cOFBnF66jZJSh( z&Al+eBc8ul94qmdhb@mQg7qLAj4`;fy{CSB5&8Th}qmQZ2sr_Ldupz+bSzzrMYz zrBfE*pd`vcGe2b4RDesx6?bBe*gYY`6I!3zO#v zfs-?_sx4I4l3GM|?={V#ro|o2^&ynMElq{8w8Z99-WqB`H*2tawKvp-R33%Dcpf|I zZcu*Bt*W{EI^aZDq(p#N*43$y7A;!S zQP;jYSg(8ZqE(>gYe7vg)*|J!7}72ws2$7NL(S`(Z&c}P9~7lkk&C-pH5K#=Uqgdx z@`@_mu_WkV3q{|p*K{l&TbZ+K6{CN2w5jHiBzP>M%s2{6#E#uJA#JO`NCmAF?D|51 zw)(o3SlhIRtZD0LX-Ei(l?UR}zA{u7YL4a9Djx*Gni#esxV~*eFqK8^pTOjbU}uo> ztX_*ca8A*lFMkxN?Zu5Ag5Tw2v87KKI;q;QP7&L$*R)FzTb+*ach=i=rT z2v;T&^JrDQ!*WXF7N@_pGuWY8s(46gi%XZIjT#sz4mQ?xwS-pJwRB1I+N3fPuf@1q zjT9I`Vh9)Ng3}(cnvFRV@DZ%gIhrT}u{Iv_p-k*r4?!JLMP&D1QP|?nm`7KK07azoukmFgi2UvNt`$^{P zUdTmBYePGSdsXR4Vb=tk*EL<+){!pEmM&)iYGhxeIj7quCRP3|X{Sp`#!ux)nRBSz zlZFy^YHAVl5(bk!LzEaXBrQ7VlwKDT2}WIOLyJ@nXHXaqVll=2QMidBQ_Yy{BTCFe zNn({b#gn3JjWi0$8c!1vw>;CNVg)7AgzpCQOcGhuR(wNi-Fhwmtt8@sarv*p?3F|2 ztZ8G6+teXU#iMs33tDi>yh=9{5{%V09kI4Zht&vaUlDBPEIN^*-Lq58q@`x7cYbG#N--WdepP;*@i2L~1~`Sf9q zwn64wc6Yp<=)1Bds3(sx2WNOoI@-F_1WGY%Q6fsL`YcbyZRe`CuKFfS#uIrj>uAHE z-dWVPzP+s#?-udOBcriFLnT6=gj%GBy(Z~~5R@sHiX$&4F`m+QbKNA8UOEId7Bxu@ zFizY{O}%5NDe{5HcF!dA*vktks9shdTGZ9p80?^I=1fpuycN@Giyj-MdX=@fviGc5pshQ{{9^54BN}ObalFB3cT%u4mJOYdzN+zRTRo@A zWOD;%%Tfh0Z??%OWLG>bM&dqJI>mMC+k*`&@RHPV!^(EPd&W3Q4MJfTwa5fDHFR>4 zk_#OrZ7SL`mA>{*q^$jf<`TSlU(Ini#&*odPA%qXk&1aF(@_%?OsH9^5E+nQN#x^x z2?@l#V@brltVH5INJdjv6B%1Vu>dtEC~Iy_Oy2Uar)~LJ30rPSwXAtVTPT@|<&{Xs z@{Lond{St^L(NN9)P=A%kwo9_X-~oKZ>3@PlT>tb4B*`~nXYQ5@qh%{NntViN&b?? z%I5X$Ey2>ZP+Lc=>Dc`2lx^M?QJa@VkMCHCrMxocl|U`#8zUC;AuXE8_673_)9(uw zF1)0`+84x_rB>V))GugL#PE3hy}x{jW%&$jwK%Yx=)l&LqYwLc4mbWVXW{RmdlFNY ztplQhW4S?7ZE#{MLz$YIP;gU78~`;nt4bRHE3j@?)782Wlf0UmK(QT% zYs55B$z;3G+XZ@`&_M|-*3<->Y8pH0)(3T9a(>&n=KwP-1(kP3V)ZQHDPa+Xnw^W9Q(XRHX1Zz9~1%mwjt|t9|9Z zRV$6nuZw^y`CIaTee)Ao_`N5WG=mO{b-n@y43FrKXSAo0A6u7%qfqU8& zSl{iO-?iO2|4V&F7`vp{2M9Y1vt%d`zL+k5_;W^NI@^{Jx%gFplHR`<&XTeGDAR>! zuLEQdA!{F2nqT!uN+S`7Mh}9H4#iP7uwH2Fw?2em@Yu z_rek8N`)Zdu20%{yu4(n>r7+wJ_dflSLLhrt@YJZ?^U?!;XJ1sK@OHz_1?w>&U3cV zsoY1Ml?U)Yc+^?(1mN6F*e3xzjQ>mU`xE{z!oCmjwlhBLQTz`yIz2;2omGfaHRxP( z7|uOMoqP6XG&)xeHag4qG&)!J18;gB=pnB29JE-*2jVDb9sztC@aR#e>q_oT1NRO5 z-vPa6@n@Pg9xBfp$36-C{(}E8#QQ7$h+nxsH9xN0r!?+spaZ6=9tNJ`8F9cXtjob# z1z^R42tw9u<XhDrN9E&4 z>IM8?1x*wkS*-vImATa#>DbW{mNlY2#s`U14jy?M_0U-2Tyvmzg5aQY+adV)ce8#d z3z%L%9&=ElbDl6F*JPUSDg2WB0|9eD$C3I3M<+Kr&+v~of<40=H~PojM$da0erIvN z(LX$`(dqj5j7Fcc;t+E4ZliPm1ggvPC;Z<6uPFM;w;G+5&%!;5z`tZ5Grx!BC1N2b z6-R)<#==}p!2K@%f5ZPnxZh`<9_Qmpqo>~$$QUpt9_l^l>|KXW!K}_*jP9@UjB;4} z5ZLhaqw-)9+GFp;Ep74KOMX#llHCOSG+9IuoHhfGRWnd`mCMKRI2qYseebdJ)wLHP z)1O2KtcJ}sy`m zD<87=x84cowojoU#mm%0&98~#e*k6bH;)F)sI-67iEFlD?lJn`L%VsG?dA!i|3%eq z&OjRIqwY0I8n&`6n>EPvvL0 z>ulJMbj~%0fV&U>M@Q#lu+ifig8qd3p;8vSx?#5Y1cFsQtndklguO0b;WJ(L6b^QM zOch>f?=j~V=qEXR18Vwur-H{A;oelL1{ry$77dgGT)UqyGgGaDsr71b{%q7zKJ>tJWu=jL2M%>-=YTYSFM^V%lA z`83CueSAFZGym#0Cra{P!t}zqwI1^|=axrM7tZCq^e+9@YY735x&d_e;(ylJ!F_)8Z z0qW?jc&tN>X7z4j8KP8=@G%xJkD?;xmu%;=w0oo!^F3sT7|?MD3|Y89;p(X&pQ z#pkM7ne0>jueeL=A2IqTJ|4)J$Ujz6_*z#kqM*W@p7nibA1a+A)WE^en>CA%#hJce zv!5Ng3D1)GFQd*=qd2$aA(V}S&1BB+@Tj^=)jQb57=Xcm6-?$KtCY-o9!0nOVKvPA zCLRSzjA(P7E3Mz>M>&;djOQO?g<~{72qCZfK*qbJ^?wPNqelOqP~)5s#N-R=yAbvL zJ`$*W542v9B&%M54@B4Hf$&*Ic)6;LfLT2l2%l|)SHig*<#JXaT&-%sFjvBPHoE#) zpz!t5$oh$!|8w*cq%d6UT=F#QdY`}kQKRrNBeDTiU5`pB={*=ie@0El>)K!cknXf| zVx1OAK?0OZ!%`i2j&tI%K>cvQ99AtOV?WCO912oDtFFlDYH)&^qa*DfOicJP_7wxK zXWu5&X)~y3~vVP(-@emkI)j6Z#sP32w&qe%y$fPfAz!*_VPQi_{XDvobd1> zB>qhG#IPO@kI(OM=$V5?1n&cwv6#_+D8K*B_!!9i;2~Vakk>)M6S1yCYa4$e-%{v(7ZrfEoBMBo7>eiJ2KZ^XHv^&x&-)bM zKf(PmK#-gFC&=^9!u=c|ifJCtRD25V`vK9M=6x412kw6pcPHR^aDP$UD*-)lUkyn5 z7Xr?Qn`b@fe(N-c<1=u-3P|@Edi>4(1;*(M;6DVxiFD@vTwqAxy0Dze&O=>lu&o=UmXM0(1ic(0@iB9!P3Nx4>F~UV(0b4uQkS z1o5K+`vi6itQF`L=oaV@IE=_DzQ8_#-2!U`dIh=#Is^`bZ&+tU1@;N-7Fa9LE6^8gLC~j-s5D>RD&JTf>6Mt*od@E?uZOvm( zl5lHY{7IB6!>xJHo1jPccH!qz3Ag59Eke(l_bwKC);zOO+3fx5T|m!ncXrns+}U`LX6ve-O7duRU4P^GbfN z7Pnj6TLgbd+~M=#$odF#DIVrtsfQa$lb0<}#%n-;)&1{$>yV zx1{i*q;M|L+wq@Ia`Oz6J)CyC`|Kn)cRlUlUxmZ&J`LqzcdtyszdZ>*rhzrN_M2Tf zErzaC_2NpdRAP(i)2$D#uWwgsX|aPsRI*muQ_$l}I>{u*sVt1N=ZNg;pD~*11XCT~ zvq_oig&(058rR1na*T%Ljef$1%_r#;m6d|%l0xO8rZd!l_j#o*h6G{uMVDPEYbwL9yQX>4pxu{S?xMMyiB`8XYw;OFU1BdXWh_uCbhGjc{8=;vTW%U(0!3 zY(=o4s~#Hub|%+#)pg)BL1TMY2=!{cUKDbJ#&UDnf`3eZlsQp-qo*ys8PJ0mc4T8>$oE({ zx(O^3(>Kb$M0q9a%M1&hc8SmjWfs!2jEH;7iRS##`b%Xljf%OUGA`)jV5o^1J8gO% zPk(8X&^t$jZ2{=njTC3h>v;M`JD^WR({0rQUJS_JILc4n5fVrqPv0n8B6%f~hyFo* zqa7H4xb!-LO61O!UEhfO(l9Ch?c)ypPsDJ27uz-`;lGUgH*2sXmsOLE$2zw$utZfq zU=wKp)+%WJvYSqGT(1uY!b=LUt6*SXu*|?#o-upWfcBKCuf-3tmJM4Ij7NkAT-A)yj~^KuafD9KQ>zi zypjwPqi#=ZzlP=0^V>VWRO(A4mfrZoG>t5^EWV}|*DN$;^u zrvv*}q(|(crsBe}ThBKlSH6Z0g-wxD(Cq?|nXLf#mjmfO=G&)saYZM~U%%f7FKsuP zqgxS#otWYbZlVS{cu28Rt=Zwt6=3I&0Qav2?NoM*`n~?}H8yspVgC%=WU55<{>cfX z$0P5^{;4{>Hm28jV(ArUU{5$Pe|~dZ^3-+mK*>%P%4kFQnkKV!XYYYqK99Ynb|X@* zbT6=Xm$)Bmgl`x#!oG3CT!jCPuxG$46IT4EAOt%@*d3bKZ`7CUL^JgmoBLVpM&bUO z_ZpF|o%gYaLW}7w;~r?C=+=_7|Hb|4m1TbO81|-p;ZOK3uW1Ug4LqO=VFmyS{Q$uI zw}4n`q4yqkZhHeE{_v9a{Da5#W`r(6C1m=;tHB*Qg$e7Dc6epO3tK&9*@kJj;P%iT zcDGVU=y^ZGx#fGHGyh4W`5~2y$ee%iN9H^oZ{J23y)b+u=-!+O!WSvZ@Wdw4ji7vU zCP;@ev5T|_v^Row@hmqSc?d2r%wNyi4)TV%WfrNc#KRq4gc%6S>{DSs&)h*6?kGcX zmT3lmp2=E6(Ynz7d-i_l>Vmu>MK7Yt)KB&tfkma)UpM2C*_$o7kcxc_T zE6WfKiX0W#2tMPh#D}Lz9XI$x0jT0(i}UD*UBBu1Ein)Toj2$HXa;ptJaa>*#QP_* zlOS(w`B7{~M>nb*!9RLSixFPd4z-~sxTrRDII;bL)jH~v%*Wrq6OZe;W!{giY-*BF zs}0(1m5<_2{VeE-RSf__@vq`BX~`4NO@fLFR8_kEOL*5TKY^thB&bA6f;=H#mIMqc zPH$O@lrg5b=JHMv&_V)LgGdCri)*nF8P5T5D#~kQ@r~#x6?^Tx z4Rt{q%+hzEd>*)+0*u469*>0U&?%rhvl9%AvIb{f4;$bT)V$IuTb5nDSLr+1@#n6z z@aHa9tj|H&DXlIPOV%=%bm)ZoG6rt%M&dLBx2wvgEjDIaV`w%JFowDWW@^Y;9=gaz zj}cys9)_XRT!Zejh<5M5l1&WOIaG)POWXo$1y%?w6KE*N!P$9^(oc=)$3S;csbU5q zYnqJuB~3=8rrlsqc^FXwX8B;iEQMX@QEdeF&yrOoe? zLTSe1&U3sD|K;DI#z@y`K)t;JHe&lPKd0+tcq|!KuAaS9{F?_T3jBq8Z+_H2@u08p zch27HfgK2wVWq7Q9nEBZRNl-BeI~U2zCvF7VQ;N*d4}^Yj^3uKA1F$=yajyv3n&3l zvraZ*OeUs7L1VFtL59KSas%2L=+ho*w+#WJ&qEmqmSIa-1j>%oCsvArz#ujnO2AwK ziRe`|8ZejT`NKX{qta2jPKnp4O;bX*$6K2m&TapN{OXz2GH?FD->@A}ZDsD~@k&6; z%sN`Ad1BX(Fd*QOg;3sBa$lQA%-5;p@){mlEqRazuDU#M`8K!=dmN&A0Gg!v0XTP&M(J7w$r|;)T0OEVNLy{+5M< z@Y}kJ#V_5Qq24AGg$L7aT(_YuRj|vIk{AlnvSn^!G{_7yYcv0D9FB z0$*U@D}1~T^w&wWyAP?rrveJ~uAeeVM!|^cd75~?d*N9JMBP& zGP}|btVE~q{0_`LjX$;A-$#UJK=kH?LnOJmPt&g4i!e0)s=qSTVIbu!gb#Y7t7RcF zSHT?Apjl@%DCeq$z^Qx&C5ciRkrJqSk4Q)%>*j?c2>udFCA9DmgOSnw2Qhe8JPn54 zfzKMuD{62Aq8eOfg%+~7P(bYC>_M~3*ly5VTsz4j8s)2q_Y~u?4T-0RsUU!qQ6k7! z74ur=K{}AbS=&{~Vg5#9Q0;YnRTHbgv?WXIRQcV1K*fKIL|99YfQX+&Oidt5LBtQJ zymE#z8~v#gikyh*oDF?Xb#wr%RZ#_;(g-InT$s(wu4URlbTy#^K)Rw|zycjmWQ9j1 zFx{dqAyP(RSFu!UnR0Ct_~&Cbr=gYoAW(;R6~jP>jw#Upzz1}Cv)In7sDx27v^`qOw^;f}4W@%SJwV)4{s;87yD9g=j)vU!x{lBdxh>7tcII|=)FTj!-Obltu)eN7cT>S7HJ4m; zfpui?0u^rEJhh471Oi|R=YPjp`T3g#f?rVeY z`lhh6bt*n+cPZB;P;a}BcQ|R+-9nBJi)MZRf36Elsq}i`QO89o{7t?%SgOqSDCQmeK zdYvZ!Q3-cxw3PVVr>40;gOqT!c#AMBIn$(sd)2hx;kbK}@L>u631X(xOWTf@6Pi7m zati%gE!w2KtIs2oJ&dh*~XhH)6LCW9$|s-9CZ!iEJ;+G$$6 z7U1m=J*(I}`!F{U$Bm$I*U_ziK?`KPh-m zpnrkf+^?Y@68;MPm5_I^5}u9z4Kj1H1dc+U(EWnIT7kUVm-w4R|K+DZLfg;%H^6D| z|C+!%1pW}n48IGI;oAh>F7OHoKTq7B5O}7*Lnu#J=l%$gbiNKqI$sgERbVZUV4dL= z=oZMx^dH89Fe=sxn&@0d_5J1ISkI2-Mu;k!X z;ap|d1z zYn-W*_!8{+Cc^QH8?{5Pra8E`WAaNVF@gKYz}Pi=vX={dbyE*F&Skd5oqD~GuJ6`N zbRu=ZQ}N)m;i~E5WY>ZI9hY#Pz@3>$Dt_ZyJTu9+i^gvn6P!sdGPS2@%g{&Oi5kCk zG^Sw?n@Fd*z|*?r({T#S-+S*yeu3@Y4a}Qy?~!d6+>!R)ja_U&Zry~=0w_pmP}<*m zjzE6V3<-|qW^?CXg0U}rV)t%5BXmfQU1T@RDoikTeP)EJy}4@EZmHMS5Oy8*iaIo&J6-)@r2 z&K`C=JJ;2*OXV{^{4F{C4S5)0B*WZ`ZOq*)Q=hYBzgaZRs2~4LW<0nE%bbVw?w@TP zhV)jJVGq>kJsiRTvzs!7+8@=fjy_eStys49>UHbYE3rw&IN?(boL}l6aToS?eIhdL zWTpxdM*SELRZbO3MVaAKv2`2<1NFE^;G)5ae)Ck>8&vd+dZ!WbO_(RCBXHs3hsLp5 z_>fvHlx4fbeHf$uB&?3#;=@8+CT}L#W6O_GxG*%!nCQozRi;tcfAbroABz|hCQecY zqT_~n3RbbOtz6tM)YZCf!oFY6RgPQS`G>824D5ShpY4i6zKN%eiM@WLjHPazR*vs@ zCGPXEJdqz9EXS7SXPBY<3Hv(mZq}Mnc+q>IQ;dlLpcOuT^QdiMpcujF-s`M3#CcYR z`m6^mHq$NkQowZaha~)54W*TfCxQ4Zn2$3-*&AlEFojA8%;6;FtAGy>$A&dfo z+>Abf-2!U`dIh=#0x0~MfSiX|^#|;Efbq(iN_Uy4DS~A z20$CSaanZFZsS}M-8sj zmRmkGRQhQ73!zu<1S&43RKb0sic%gs&$Eqj_R^8|m{N4d8!ra2 zr$=M8=VZD4b0mT~$)${kS${Pibkl*vW>9|4f``?P$$(v+IW-=hV(=bhzv{kmeOrSg zP*mp6tH~qAWb^h(<;8^;U3!TUE?Qpj+I&l9kX|~u(Z@#SX6W(n%Nzf+#)~ozjODiE zhP-~B@VtF02Wc46qukg%-{DwCkH1rHWD1>Z#)TQgz=5t6GnPEFJYsTa5`9>=(AzE% zhC$CxW0plo;PLLu<2`mX6&g6&&(ZviVZy<_pKOjN*D~kn7+zs&Q0N(GiJ#O#QbXEt zJh^6^tMT|PE}G1o#PS1=O*%wB5uEltrDB1;?{I5AXrKa^w=#*yv7CP<@hSXW`2W3z za!tRXuq5Sj0^2;@dhZzG-5hw6u8_1739Gl_j=cujFju=PX@OHSfn2dx}osNnO*R=;Kb-_p-ki#Pg!LGoe&?v5IZ} zF<`zIFyH)tjcd`QOMS0U`aN;eKk@wSjPF9xv;u#M_rgF%poMzksO=&TsAu zn88B~w-}F`a2^}T==!)nT%41MJzp;$26lj}4>dY#p16;FQzckbY>v+# z^hW}ZWGa0t+yygkg!6&Dh*7R)l)Z?8f!4K_KC5Fyc$ZiYG!C)xJ->Q89_4*{-+F#| z6nn)7G1Sg4-&GWub`{>(ahp)L{jGhk(^CSh1tq(jxAlRU65emN5TlhpT!I(+sQ}q1 zyiAsdbIVx>P->Gt=IUcAS4P+X;!>!BdWo5Rzm+HFmRCWL`5HpLp2}4BOhs0GESvB7 zM)-Q&Rb|j8ouoB(ZU~MEB+AM;*VbB4_=A<$t5cHXM#K26^0A2x>eIIt$*X_BByKG zD4rF?qvNQKl5QZVK+K6syJK~LP5+sn#mSHjpQKJp>2_+D^izQZb1Y9uA3cZQhdRZr zKXD9L=kQ`hrM?L?%(L*W4)pLMD0(VUHz-C0S!$OFg^}1fA;GZ7F8ol3yOc_AWSH%mZ zCHDJe*{b&|JFm~H#x%JGliaM8DAuemWMla7Fh;<%5 zCR8$;EQjc8d4^fx379t(_{|!R9xy9x3Xj(Kj5R(PQD8B+tThpWC{aV7uE}r_s%b!v zw?|lfNev zaPmThkgf$Nv;xDt1=Z0BxV&KWLX0Fpe3OU4%XQ$*HQ`qo^ zOkOdU8ehE+K;l%W%f3G}B46r5$M;R(BF1nHXPqMRSEQ5qw;EOp_J@~QgIPTNC*`{{t_)oWN{HBc6aa<{j|erhGj!zpi2Vb~IVc zRI3M};aG}zHCX$pC>a_(1;pr96tkAHGeS(tuqdxvvDYv4l7%rt9sE)Ki|tLnpZGaj z$2qDG*dpfnd#=dgAp~7Y&Ml)D@Hsjj!AD3PrRLj5_5=DceTO!FaZUjzRNhQJ4HutK zM#rDVxu=Zia5m#G2DOg??)`tZiBOrE$lha;;h0wrh|cp-ewo3sq_ zF#;E2Rw6T)kZJIM{d>^D(ZtEqL77`y=#A zc+GqNGzEdS29%*mk2t@_1K0H8@kgLsJfcum(SsL{S3r%nq7-$$>M>Y&F($N#p>zBq zIiRXM;zI=*GsiVJBEWmN_xv>j{H(&%v7GbB)qh1e6nPOx6`V@*FypY$pl7`2ZweoY zm-7t5YAQFQkQTh_?1@sGm;-2>=<_45V|T-kK3Q;NH~de$JN#Y!!8X6+%Nv>n?ocFH ztsHCZ<4Vd5uM;!8wHQR|F_={4Ksr7@S}e@x3-cItYCWWf0SixzSa`0|DODjQYjy?I zd+nPAUtY$U_^Qm|L*GX)@9(&_*k?Yah4JV-Yd)){C?6J^FLEj2G4+c4g#uI>)a+5h zMedDPD+jvdf}-q=SE7j*k*x(wvNvM!*j2={F$Y zlE->?S2Hxru{T_l=evAKUS}5Yl*Il}W*!&%!&l+G91{1M?EHfkKBS_xFUtOI4kex! zu&pg~V8tlK^DC=5>$v(~uPlRUX9}Jiu zTB|A8e8n^XL-1ylpg&TB`g%83UYL>>;Y-6SA&0KX_D!sIai-X_7bMOe zeM(JnWpO69Z>+utfit71PaYdB4Yz^9YWy)uDxPKUoM|$YV z%dX3j*fsQuv+eXZ$n$ z<_gc~<+k{kQWuPV7T&H=yf;r_U7r>xEXxd?#>w_5n#+oU(NkcDbWr6VUd#q@KY0(G z5-4=&wzdc9;%(+>oLlr7CJ#wp?JY&~GY>d>=R?S_19vk{;`ogQjnA2USQ=i3o^S~# zI-KQD0CDoZprmhOu5v&KVr8mBjm$Wm2glBhr>hWmKBf^1N_IPYZbOsyhd;ro3*?ZV zEv22h%*URDnz}#|#iuT(D__sdvo$=SsS70XH586ni?j15N(k39cpA<0?L3Lhq0k3g~--Vd| zA`YjW3x2P>ATn_6J)Cp-E}*ey0^=~epQLjS#zc0O*ise~+%rZFhrl7$OL2VGS&m{@ zb+KD>$VE?Zw`Yh*hk%5oJ$|jE97{~A=ANpN5ZSXI*?>RO$Ml^?%D~7&8!v@ZAHIZh z??w-p204CjXu*>m9|L1}m0B>J7o+ie5ZqsSEn}HJM2n8(E`y;$DAs|L8Puzt7$rli!!Y`APWC0;7Xx9q4(1 z#n`_aU0}jlgfE;RBbFJyO54UTW1vyz&icObjr-_tK?Zd50n@FXHb|;4x2h)~!mW4~ zWRz|`V7k>ae!k60e?t5%NIEbUU)uFQ@tmWHqVXgew>Y_%o=&fCyM$980VXAWpYnD% zaE%d7N_bRxI~8Yd={>d=DUP_$fMkvh#e~ zC7k19y7=9qRPX@8)8*fbcYK;f8l>cJyM$Ap1tukYmxO0c5Z*6PnZ7iY|Z$7#7tK{yQE{iJ4ya_Nx{5{`04oDh21~b2q7QpM zyk5fJ{YRY-${}SeyrlcPnf@GwsL<7cte6Gax5*Mr=blU61;Ph>4}^9z6f~3 zg2#5LjFq1y@pG0{z#Dv7^GErXfM?T_=3TRWf7W;(bq?`pXUS5qLaFh zcINs7&eh}Wy!+50=E46P0zVCA82?N_#&5vDz;t~AzmBy{y0;1BH(lvI6Oi#T0U7T* zr>S!uxtjn{6uI*NVdl*Qya4W_mOvN~@OAk%XL&Iddb5J}B@2gqp4xi15r2RICvkNf5y z1NH}5S3 z=E424LUYVJ49NK36L%{ht^Mr0LVV4uKlfwcm?0^I@~0*8?= zSZ729_6h73SS!#g&@B)^#j8W)Sttuj&$*v&{I?SUhA+f)Tkmz%;G1spPs6h+bbG~3 zjYGPJ@uyiX_}0AkRro1-=o~a`7j#F_m}!nkeCs`Khq$fxmL_pq?{V)U4&z(zZ8u7| z^&YcG!mam`!xleiG&Gsww%$9q15J9?d)_@l&w8)ehBzu5otOr}%5A;3T`l<5dtQmq zv)(&?YSGhj+_7H5t@nx=p=Z74Ef=@-UIE#n(%X*4PD3)}$9k{e76skbd(zK9-+qpP zb6~pNz@xbjf4ZY|z|0nWYaL*ZxcgM7!|?;SfgUs6N$z(LXb=AmFzxO~lfo%S?BUNP zxp{|#Jv@@+el&^x50c!x`@$ao)g-qkDZLw$!uKc9<2kfNi+DO?MNnNdBzOC-?7B7t zPy6-janwZL(z=f80>Qe*#F(*f1Ze6>&f;Jvz6XF$12i_bv|Q8H5L9Q_;wcC-$*1Iu zy3Qt?yq7a`nzC|S-zlF15Db4SZg9d0{j$2|4$CfCvYb}F<8Fx?yDC7_k2!HyeW~-+Xm&KGj6%#JQ2B39c}Lbo)kI0?QlbV3*1aZ{L-FN zj3va=jJ9+aqiMov9b%Lg>ytB$;zU`l4z{$_H-~P}A1qki*4&`lop!3P4a91&sI3Ke zX$4n?P^tA8qw_CVh@+1&bG-AAmlj?q$0ybKCVc3?e!A(uf4(VOUhtymzciMc!wUa1 z=m~S8=OWJ)`AT{i9vz1uXcv*dWapbEIggYlbi9lUGlrQ6=~+fiOe_ar?0gd^I?BDO zq+*q}^Vu%+I6tDv!=w~bk(ja5rswhQ=Z^}#XM{pG=-G`FXUyw(=bLuOxb79EDlieF zbp(?*%=2jyNFMKe(;-geV7!vC9hmgl^NYD&lg7}`8~_z1=^lpNNc>!c4dOhP8yp~B z?0gf)2mZmL;!&m|aGki}eyLW{7(*m$`!l}Z%W!HZXY=eNj!oj^C3PaRzxTh zXbAKQR814%d30lMF%O05%nEOZ3*@)b7X~|G-2d6g8`HlH4CwoO7XUY=PeYr#{|=z& z12<|fT5iq92J#3aV;hObShJSm_^WHW6Y+3!EDx*}p#X926qKiDz*kW}q^Xx^>U7=z zug9g%I#`NbN7wY9Vk&1*$5y^(0NJYr4KgyFbGf&iw?yA^-deOttHx)4L2IDL_VZc4 z*q&VH#f_2Jgsg;Cooihg9NeOA}dS1czmr-am%YcXCnu^ zLfy484_U$PYu3s<{i26vf6eSHAz2aWm!rc>_t}?(gfHm2IJOf z+$t%cm1Cs?jotkJ+XylJb70IWURw!ngm+4@UMrqyi?vh&KdM+``brSd3G#sor8ZrE zD)c9Wr{ITgXDL(H?j*z9wN;hvZQTm|G75kQ_Wodmbzpd#Ld92XPBzTV#K)I(Oiioj z^=_fJRUr*5&O|us7VU)u?eusL6T7+*{uSE*wB=&wpiI>&V&XxckJa}!QEj#GNq#_Q zECl6WoYoq~Qaz62ct+1PB1>^T6Z)&_<2=tA;i;q0O1#NE@_T7K2;`G=8$az;Md2N?g=kh5188Q9C)shdK5Ya0pN2 z@1xTLsd6S&!laOjho|YFysvJ_m|eti9%H;3Dl0HNW-awviQ{tbDlkx465xa2S(( zVv10S8HT!>dl+_{KB(Z;{!7TO47wvmE~L&vT+k zit6Q`QRwmVG{WB|7fN68sBhvK=ryDLc8yr7Z0Yn3)6rKAAM`Ixq8})1%*2&hk;R@- z9KiNM_AQ29E!6FyA8AYP(BGThpyX#sYI+4Ky^2_R26*ryO?`)edE3@B`5la#rqw6HyCThl8t^qS!C3c_-UHus@w??^b^RpaW5)@vmG|D#N#gI4 z@B+QA=O)mcF;+IKy<0Rox3EwnHxEF78G#6@+QhwbM zzG9N_VF_pc(&-a<@it6Thkv^8T@rr%B;nF;Ce=5}l>L1RFM0nv2Xu?^cL*N)nKIUX zeM#ayeY@peY3Xli_y6w%fm+%BXTMV>4L#}`jR+q5pE4GnUEc-)d9v^SQFy$kZGFQ@ zF}Xim`fXag4}do!cppWNdn`kOC;d1ry#VkI37+)lw0OK<+#z}u?AOXzjU&R(YqvpMxp1!0muo$DOwvka{I9K+@v|0O`FoUAspC>HdSbpBDFT0ZDHmAnADkN$(}( z`841^3P`%!0o{O`0imam+W|;=en6&oskkoyr2b4cAbxYR1fC-BSs)Xicat#wZvlzV z`-_SH?*grR88F1>GDHwbbnvm{|?A>c>g)m z=@EFdz)nEoR|}-vA)O*X#ycO7@y-+Y34tG=F_51&K$c$+kmbjjDa*|bqClNN;)KIM zCX5Q~6WA@VR-jj)TcAVWFe0n?0{aAZ3#=9B73db|5I79JV4V>a*e9@CV68x}K({~u z6>k?H_uIQ=9zlHt?x$Pxnm5Eve45{h+nP7jirbnea6g~%t$EkDxUF%T<;iesTn|Zn zYaVbw+}6A-U+}GY#8NB1%p3kg+-^XcnJ8D%x8{wXh9BM5Jd2;%h(0mPlx~+LK_o?W%=53#p_|`leP8H7f zLGubc=x3ROu-M(ybFjO)8DV#ys@>`kENSdb3NJ`5h9_Bb>H>Y7{C_4-U%?=h$PW4l+sK3RnI zE<6+p@JXaNy54#R9pdYq_%^#=S=_ZE*cl8hZtJM${=3c*S&|F%>7{pz$<@l{)^#nx zP+O~osS60y)F!^8rn5N~w6YG`0yh*j1?#V~uzmHR<_&cry_F7f$+z<}38t++C~rm5 zC6VCeYiLMtBa=Qd#wfAN`K=3qNz~d{r(Gqg@(c9%-a12KJL_->Q* zzAP}K_`1xgB~x+5gTlHxJZ+E*^HXuvPkuDM4$tG0>i98Mc7M4OLlHI2-#ooV+_me{u31AoU}x zGOCWU(l$sYx%!QZV5(lm{Tt@vBVfXzcHY%WZ^Ambz84Eu3gArgTgdO%27!x&T(_$N z!0j0&jXPB{YgjRi@v5LGu8~;?}i2g1uO0I&( zjd2=S-9Wf@6x-3cS7FwoOQ!~Ie${p^QsfsT`2}p(Z&kTFT|XOF98{`>d*PO1?L@A z&NgSFoXfCyKl_{P?#KgA9<%+-{%)rBKzkWNi{J;%6B^foCpuQCiUh6P>EOC+32ql7 zJwNGv&84IBMoD~T6A5H%51fV`Lfce31gJyR!YW|VY8#!rnnYb(gFEGt`j5KT#n}9s zfsU$<@vCdZ%)7@w#D|{E2OQi>(p!;@hO;%==xmP`LwBM#Qw2P*8)!!4USg{vVHf+F zs!H76^c`B*g!Zxk_ozDS9RaHI%O9envK8KQhy;*DRNM{R@Azpq;@}o7bww014V=yN zLeP(x7~nloKormq*p$1L!uH)E+I%RcFiRW-^9%|jR!TVk&hz3ZA=ECL5R@HM`BlKe z54taS$a#AUIReo`F`~mUqAd1*i0GLhO3rzsIXNF9=eXqHCyMoDw0=+VUJR@2D~fr1 zLl~S}+`~mFbUgOI{38s2in8KgQ&t(!lvNJ?G0H1J`TiHKuR(WkeV3Jt0(=BXu?x%H zrsx_^aJSLYM2l7>98FD zesgeiG02?v3|4Pa5EF?cCXhe`8;pZ2+Mg)K(G+oyR^_9hJM&i1MFw!~0lFro9dvad z0o0eMAHhL?Wag-mkBbR(1KF_Dh&-^BjD^3#^!(xPu;L8!?(K@{2*ZrX-J1YP!(U;( zfH|yCBK$~oz>F}=Z$2@)3Pf`!uv!x*sqw#~@zaykseVPLnn?0Z-nbOLYm6+I<-@R! zXzL+ZhqZMG)vw?GPDS!AU1N8-HH~ZqdOeCp?+%@+uDD2n z4$A`wn7v*A61>ZR1vKv|1Jw7=9CCj7mrDG(N-&~SKufD~1T_l9DJ}nC5w*21I(y$i zO`r$%GG)LB8NtBT%iO?y7n6hgE@lFQAY|tm5oVZS*mOh5ZoiQEeZheYds` z(!NXEqqOhT_T9AiX*(*26?I3>4!YsL9S~eke|kPnVDN~8J?%u6Vx0aTV(D_QWDTCi z=6xJ<D*-;5CgBX!Yapmflw&J$R!4aaN z1i~yuj6AN}qsoJ`CRcDb#&FCErC-0eu@vL~AOhz8*uz-drgv3ug_Ph|pv$+zRk8y% zP6$f-An3TQ&WTI;P9pA#&j!@EjbXM)vecM(j~K?-9Z6#>J1NFk)onjIbCGd&k;nt8 zGez!YL@SrQ?9?14d&YHktD?wrmC7@-`G(Tmbl%PboRHv=K~mBK?s5*e*64ZdLA+|=bVxVl9JRKT+47~;R~ zyqznjqxM*QRGL%TU>;qt$L^C!cB{9$ktMa-cM>nKlp3y{r#d9RBg@*^#R!pyS~{+gDt zcZon^SRiumRsbWcX39Vz|Au+jc6ypx_?x}iaA7ujw;OP@JvkXLFz>9-kXelpPnN|J zrX%<5}3V|%Am{)0h2NrEmBn#^lW;y9QH)q2*ywl z@v88Ol5Ra7P#izu{4!Vd&@M`L<59YmuNi0=4AY_--4_-a7}h&`-$U6mkxZSK;*tXc z^8tS~VsT*LU|Qb?>L5%@2 zHbDNz#)h4=_i22LzpR(kvEksS;$uTB?ZmMm#;G0~{>NFm6f7Cx2VAII_Gkyj2g*z8 z+*Ip}8RPO4_t0*BZI>lY--Z$y=3!%qiFP&4wqui~u{Rb6${6iaHP^_!#8&CB?%5Y0 z`g@{Cm%>vQxEdrxdiEnRVh#Zl{kPYlVz?rQv^(Mg3`8DiB2ag7D%$Lk%om`Ffp&*p z=~39yG1-=(bBb%|b*{te1qprW5c&c6g7xq1qbiHxi0-PTXb>fR$T%CVtz*K+W%)oX zpq7z8UM^Lk=3Kf<4LQF&pu1DA0c7^5C?341k6(vMmCdTSHrl!s(*WTJyF0tpBwa_% zw>U!rZt`601iDo$Cy8x1mSx?B)ii66Z7Ym2jdv^6#W-2u75ns;Zl$`|PVKL{Sf94{ zp*8+NNCWG%+c(zbe! z^XnQj>m+lD%P_}9EitZVNPd*wpt@IZ^J`nt^z_x{P*C)RKhb*_7r2Is&1d_MWOLCk z?8rap>lvTo+_DRpu;D8y{04Oiu9fZO<{8F!cA-F6t?~uJUuVT0`87h&%vQVcSj)Q} zGtuZ*yC49{)Pw%h`Ryu9`M~^q^#%o$wb?+aP!A7+@LE3q?kLEkIA+$Nm;q5_oQSM> z0b%!0#ITpc9--VokE0C2Et$A_cVi|m&4gSa7DNL1L`XIWl%SY+>$fLD^stOb^Gmxy zhHOt^lTiutOZv>xT__eIo^ZEErq`3)PB`J55?_Ao5H2XIm8xZhd)Y#@BP`D7sM9L0UVs&Wdq z?Eu29Q*fbf_%_wq%!l~3nn3t8S0KE~m1#aSI#X~<@(+~cAH+SpndYJX5ts89qjaZPzALPT zGv_Y`bPEsp*}8FSKdw5i4@fzMf1&bJVMMkuH%8>^wxTyS?^n5rA~)~if7A$Hg0=F| za|>^iY(x#+Eue?4%X=Cwz71t%ntMj4m*hwDk2!y_H-AEv>(#1Uk^14TU{Z-zq7Zdi zK42?L|KVDk)PRLGB@R)T2$U%h(IZWkyy0i5w|P@d)iAQM`SR}1CfJ+AUJE;i zAo^FpP6D)-!LDf*<3&EKQw!tE!wkly$;2tZ(19VM7~fC`mtbtb-LbG>?p2)QhGhpW zkXa?DXYF11;Qc?>j>Y`fM z-Qb6Iq^DLnXh)L0F7ZdIy%Z>zvS%tUr0qASn+##uWxPRDn@*rL;aiH%(q(1$=Y)x`duPSitR6HYh zTxL{Pt5%Ky>bGQAxQ&Aa$ptfSL)6ZX!#3|`*qlAocA#r9UAH|87cgH(s#$09v5Wx0ry#Lc|LPV!I8J55{h`OE()B$gQTn8LiE@Mj~cVE_6bf<;=Fbi z3uxS7f(0*4+=_}V@^bM@mdkJZUudDei3fR!ZXVlo6Kx*aYH4%RRzX`fZDq8%X#0Pd zdl&e)t1|z8Ds2hUGSkv%Rf2;QHdPW5pqK!KgeL6_B&9%0Q|%>bnvyPU6LNu~Tmqq` zvqP}Eg5c^(cGZ>tdZ8<#wYZo9wgm(NC=^ji6|p4<1-X=q|0|Nj2J z^UCD&J?A{SUj0_I&aW-IEfuUTJ$W(g1$4$aiA@8M+IIqWGQU9zH^Ya zFH&8{ovi!1?r^H*gwx^Hxc9H5ki=8I5i+uUyY>}071n(tc{e4dTM<$L`}vBs-(P}&ZRSsK4R83NV?O=+^O#FDzehd(SBb}O*L!q3 zxkSJh2-+~ER}lNCOBK~W{mu%A_CD{ENt1JJ_%T{hzi&`9>&V1rmzcVpG+1zw)pk>()#{pkTb~%G%@M|xy2Msap6OZkQ(50Za)_sv3PQ8DV945%c4d>@znas zjdI~1yMYg@+v-jBln|P@+}<{5Z*m!HDfhmW=-KB|Q+TIKCJl%#vy!ll! zmnj-~Zt8Nh?z=Fn`Kq>t*o^3jDDCx$Po7{2{!dOx+V!1aqf4-!w19 zY7rkL?6hJ^o=vf0zI5u#p?VQL#mz=~rn9*BGCk8@+{~nBx{RMPc&69*DPy?bW$m^o zzq})EWPaG=ADNu&-E;jqH)Gfqk)Jk$T_Qhm+U`)&Z!89%2mIv86%;V;^W9oIN$Sif8x759Gp9o1vu_f_xoXdPGWJ}yur zssXjbpa#&ob_LA!FEqqOgR(uP;{TU=1!h#_Nb1Sj%;d{>9q%gEPZ-5 z65pYr^;fOz(UW7O=DkZC|B6!`)5jvzuok_>56x~A!0~y9mN3Myqj4q}MD>XYKixqy z8yGvph0g(mJ?wMpKhG zxP(UZ-p2b|-BXH(&ckfSjH@P$Qk_1;@>ECP&cJ# zsX1fsxVK#G+c;Z1b2@S+;hV{1wBa z&y*IGwV1h|d7q+rg8KXumS<(r0PFS*HDORx?pdFaS(((`t4Y6~@Ha)(jKb$?%+CLL z#LXHrZUyn9UYF8DChM#GO%>3og#A(mU#lWpA9u{~f0>&i7W$>Z z6Z=&ye$s8`!Oz<~xJkE;2S01`;3|NsOij8Ks^_w_cEPM|Dm6aUeLTDweIR_N9>AA{Zv1;hJ+wqLNHa;i$Kzuc{E zA4)vVow9sXE^{N8`*svdh8SS_t4m+!7TFtKguLhcp?FVqlu{gb7^kI_-tU%-pWsms z6F<%a)WN+pjgQ4HdZmoCL{`j*(%vGZ`xP}JpME#R4=-G~L1{4`Mhf{_$xD;I`|bdCcF}(e-AC%Gq-zS5-TMo|U+PsKLZeurmu%)AZxT+9 zY2tXF00!QLeWT0j_}M>%JZAzT{lq?~=8BelLbCutRp*-L8p0 z#4dUnt?BLISod@LVu?p%)A>OE%h($XAk#m_@7xIgDx-<26H3^)kTid2uLfIH_qL#5 z{F+owbo;s|`B6ku7^Nm7ndaUpc#i0e>0#eE9w5z-1QShoDeZ3AM4dh7+VmNE;5CTW z5h*xD7N;s4Ip$=Z35H_vVhLz*Ldl}P5gW7FsM|!76S3jJ&fF^AF+Q*hAt&_a^q&Ui4sDZO{Be_6+r<@lWjNnKM+r>x#9N zJ!4O&lac$#$6Zg`=WYjMkfFvR^Jf&6vs5VDb4C8pJ&FF|-YELj>T|3}!c+8$sdo%5 z7_(N8J#%m`e)N(X_Uc}s%Ar0!w5UMb<+s1t^CKqJ;o{_S3Ti=X68$vSJVleI+8(6k z!?B(wr@?JsbKDRkA3q`s{8_MVNd`%ZUXAJ%WeLj03oR`cA)zsQ0*M&s&M3h4^zoNGUUHDhnPw^m502`#y+$ZrxuesZB!ga6UjpLLj+@6+LUgC*3S&Hn@zjr8zZ}+0#3Wv?25(2I1qf}UF z6#pi?A*qqkNif&_iUNL|qFDTZitr(K!?%ihJX;PbYLAOwQ$P5Nld03Dm0pA(XRWhH zwOrffik@~Mk=wdQ$O?x&ypd7toH5}B30Lf!S-=r4XR&u~f|)j|SgpTzv9H-ovAe}n zTCp>q{ZEQr%SbDBHXdEEla}{Y>~|3KJ&OI3^K%#ZVB8hSw-KsQnIh5{SweY6e2b-V zZ__xSjnr)v2!g_tFd|gCW_hsO1^xRE8Z_tvTWBcU$9`XH>LX&>e5UVr;fVW)6P|SN zjyWvkA$A}7Qu1B)@uDi}KKqnDR?S^}H+%~^DrOrWJ6_*5rgH*$nfM5=|D~@F9!+=D zI@>i}nzUc$x~0wcp}3oN$(O%3$8WrHM)USrP%StmTBI}6 zik}M4Vez!=sh+uvS~<8w@?dxl{cG8SEaN`J5;|H{{&45*nwybt<)aUY8k z{2^~&mHhE7q{_ZJmfm0K1d*!OzaGBfyDpR%ogY*+tNOt*`s`OEaYX# zr!-mUS0{il`7x-L?9w&Wwc*=$ z#Y-QLCBM=K-&nG9AeLN0_+?OhmizozfJ%mLnqEaE06jstmQ}uk&+Nys=b7S zEF&S8@|L}jgq%Y{C@UV65SrK=fBQMUcV?O{az_L=|2QTTW9Jy7OW(vd6v=rr$t&nV&dP51tH;-4#h zn~(SY=+4WGNMFDCKRt^7<`VBQZ7VzZ^Lh-wi-@5yKylOYj1pLzOEBYB8tq*!SwVw>S8h;;;_$jVk zk9s<_BWD7BY4`T%e3!1rJe}H82Hm{OdvK1!^EBvtpY-%1f2 zJiDC4_eSUnpZ0WWcg_Uq&5@4#px-#)>D3MoME@%E`=9spYL^G1*ZD5D?DO<$ry2A) z?!}o8eW9HXV(m6(d$=6BsL@&b%}Mty=yn;M+HpqwcHhqgR0i?Nf1dU({G{RE=pV9w z3FOOU(dW$mNy7=n-v1y_{y#>=NAy21yom~t{d!RTXPbSN;ftSkdaC)qryny^6x|4l zz6GSu%v?@~plRfv3d+66Fbc~5V`l#yLf-OUY4|zATEnWq|5(rOPse!NPXkxDeTLT< zUS_z~uohH&p8%E4*N^t$3qcqDQy%X${J!BL!&<|m4L^324?oH95W_KsktmyK#Pbe^ zg(&|!46g=1gnf;$FT^HWb;ws-=hE0#R^^o#pgdjwY#;T_>_U7 zD**W`n8ZKPJ;gu8_b4d3(+z(IvG^}B9A|htj^gtVpyC@MkizLqCB+vv`)3V*F~<8( z2j%|@I-yAKFgyvwtAMg}NLpkHHt~kTUmqlO{F0r>DZzR$4Nu*oue2KxLpvh!0uWs>}4uiz(h89&+UDGV9WIXmr6rUgIQgLTMvadY=c!8(Dub@m8_D{~SA;uoxQly2FBb&bwP zQT_+i05JRb>3o)`ESO*NlRYpxuO-bITAXG7I)v%|x)Y@4Xy5Am6p{jJJ&W6e0e8l zwX9m3qSiGXI4@h)P8u#+*4TW}vXu?1xYlIOS!Z*FNM~C+=bBW{t4uuy8St1H^1{xB zHtq}|Xz0V3QSbLCjYemb@Gt7G|0pdfIr*fMqR|t}?U<6N?)R|kPg19pghIK_DRFao z)VB;RqjzOgymt@&@3i*a%3vWA*fq}RN0)Qv{hm|OZvn)Q<{K(w97cRdmM%eHbk0WR zIUt$mlmvX%S%3-#E%6)89Oyod7=yCRk3597z%Sic_ESy=ItRoR4%AUATit7=p=J;H zwIa=6d7yJZqL!Z9jGyjCu%XMPiLtvml{g-z@pD5-);S<04E9J=gesUYUIhu48Y9J8 zKcx@$K^Ay=|3>?Y{ygmUPj{4X#`V-a3LHz$@W8RynGcC)*rMcc|Gm!HpF^FsPdO~t z$~_*jMCZ=L+y20I4Z@xsk^(>}90aw!yR+*z5N@TKynE=T@-Nq^#O1fiw#H7hUi z$lZAmSXyRHE%j0lc(G-qlf9>=OZJh1;&i!Pc9$Y3SfutPlLrrUXCYzC3%p!$BijSFsWj8!xY6Pw zAiG^uC67y1m;dSVK9by5m24ebop`}D37V0$ihJ2r?l?#OvE;g`)roy*NUYpM79LU7 z3In;7WMy6~c`>`<@i$(LCC5GKG0m^aXkQG?z)cyPRX zN2CVjLZqKGhrTFLC_tp8UGHdwd3Lh*8`$zGgqQICjUpOx`W?f`VWWvFDn@ICC+}LUe^}XTu zyHtM81p9Ax4)Ad}R`J_obSg(@0=lgGrNy^{-z`WY%2>JP-0#vmP?ynJ`HrAd{P*!| zHaeBFGo!>WdabiIBDW)>a(5=6&vDQ9G|FR-(W@RZ=+o{G*E??XZO>QrkwKTmSLwJM z`g)^R{Wue(Bdgrj(M}@lH|We|%B*ORe6p2N^hXe<{NEbh?(<)8o7tZv4(;pg1QqTO zknyAFT_TfR^(8*v@Ua)%42s_-!-QcQDEd=Cr9kTUmqlSPBcN%yYc?sSx6tCW+EBMJQ=O=s657ZXjd-gc_hC;vLCwtJ3 z9yGiBWY|7){y{(0*ed#Y^2A)jPxhdne%b87xS(Y+-YIi;mi^)^yJ*wt7i8JLpJm^Y zW!C|n?gmafGu7TOGi{??P3i}6v9MsX-Jz!`o}=9VnRVl5Ds*s*XUc(7M5~%sHgvA; zxS(NmXYRv9Q_Rwn@gBE!lK=nCdw6;INoBm8WAq;Gwm-Cwka`o(^&Y;Db{2~A!{|MH zo$RBSO=>up;Jnbl9=wO!z8`xF9Zl;r;F%e5zNfiwWnWb$I4`vK$WTaqZsdFT>Q&5l z4XexKIr6;FKI3EFp?)^9=+7xLHudBmQul0*a$cx5$z^)of6~Y1KspcYbEcb-`vjTi zh4vc1LJPDReo9}-r!x5lJP))_u+#W8Tc_IPHZOwEZjW@>!qb8F2}-o_hv~DruV5Xe z^vxrE#yX=_9B7|l9}6m(VEoX4lU^V1cb_11G@Hoq>7T|oEApDYPoS+5{j`su==A(S zjow52>*h{^=DxSHrg1we==BP4b2sgigt0x4*qBjeL^<``$Y zM{-37&P+KN!KB4ugjzmwL>P%WNrCEwoy8KlL#{{y>t0Iy!Fcz!h&w`K=Otg&i+7ju zGQ5xB&nJnMAJlOi?|>7if8GJ30JjWo0Jdrf&e%HGBL>OtTlnu@5O}vw=|7x5uQI`l z+}pMpQB!`ZV|ypv2)6eFusvREf02_dFOlm`2|``vLw(tYdJ`BWF;(SvC^c6p2Y>N_ zmijPMk}x1(n!ddu6ZY87buAj=Zp>3 z-F=G7ZvnaY)Cf0@GK#Jt1Ulf2`%u=0XRr@zwuLLpMFwVNdj+lPb^b;?U+ZR3l)($iiM-m59! z8}8Xas%VRc#fG*ec6#xtx1>LBvRV?RvetSKu`fQ=wboPLyR{z@X6!YIz3O2#V|K?AU%Cy4vwLdRP^V*eLa+t9la^EejLYU$8}zU0J_P5gH&-QI zjt$*k`j|u+$L(PBCZiLDkmSDs)+BZyO_yJrbSXfjZ7L#dw6YxpqwJ;~4k41;b-#^q z&f~UsqimLNL;`yhfscOw5fPRv6l72!Fr%P9>XcknETc7)U0dB>kQ`)7$)4&aXR z@KR*7k$FbJ3q+iEA=*J4j)wBm5mVyHpD61q!-tHR;?d*DcPH3Ei_+Fjl&t<%2cT{1c?@zc{5`z@Qa@pm}> zC{Zs^{I#&1R87l!e~CbnGE(bXbNa~P6QNX!XIh7krjil#cjZ3j2alTMOlm1qn>>Rf z4rxSAUvu0n-bN_;iDx@pxKraoFJ-O4;iEd(j1hvEoIB?tF6g~m%NdOl{O%u7J|hOT znp3YB=se8tBFAi7%Z19^$2nkn*?43Zsg|9s1?;PKvM*iT%RcgLPRTdXxdky!#;s2F zmKXHn&Iyf{R8smsOK3)WQhC;?4sXd-sHsE-iAyd}LN}ABE%-%wCXowBqz;8jOQgzk z^i-;*ZwYETy+G@-3v|RjsnXj_m2RRQyU=pUYy>0w08K%M|4gaf#5!Z*Y+hk;88_GA z!fk2|y)=$$HI7;}j#@Pi=RUG=(4Rh7`v{J+JaGFsU_Mec@!xAMA2{h5O*?HLHNCz3 z?fx{t}*okP!T&YAplK%EnSBG_Woj_Pb#5J7uq zQUi%twBJ$j@G|o#Q)XQWDJzYmao6}2C4{J0i}X#6m-k=ZThlW;vi`BK(}W;Ry)J2A zxy_U1Nxx{^WxNOJVPY2#K6%6GqedF`^KUvSLXUlsw8}J9OYvCKwH6`IlZM^6ldvhI zdJ3u68T*q?fa?+|Q!U#b8|tfR^od}Vq{65v-+B4J4Sq!FbE(ipTP_uE@j!`f=p&6d zxN|Y;`goc&SCo@xN8`x~KBvw>C$fT1OmonPWSJ7nL$;kCHz(`VxAgk2X}neCQk!@x z&VrB{sO56mM)`?aJe^O4q#o zcS=jCSHwI=Q1B{z$t%k~Pl-a3()n6SkuNEVkt~)_%dkv_SSo;Z;=Bijgeau0dcD~>+yQ=JJ_j6F#K0-Z1z6&1+7POT^=yiY8Eff1H!#DL+ zU)u-G8(nfQL-;;sd{+B&3uB4dxTN(Ltrx12Us8QKwVr8&j3vLM zzE+cT_f4oSZ&qEZmGK^~D(jQuMBRZ_n{YP?5BEPj(C?%JN_Ad3kQ|(VDjBC0;ijcF zg;z&`MW$=DN>ML<37_IU;p=u2hltR~q|SKIp&aywIu`MZS-LKL!4qDi#F5J)?KOw5 z`wt7Y8>&C4tY08;i>R|j>O<;V=u}D%d67Hy1Bbd-(PNn;J(f4^)eGIL$Z<}MZbgVC z{*>ob!hfZNUxncmC9v?1UgK1n)P4a@WAF-;ZJ)tEBBdvH@r7@PB!-9LciUL9old>1 z)z~m;sk-XaIN#zbhwiB^e>A-QmpW#GmlAwAF=oTJ=@YIVzRrU*!q7m}`f`fS3@JQj zE;&~D|3$U}$?vEl#(f83TQ4gqMcT|VsOhI30GCJOzZi0h`M_(^^ z>8QxULEk<0((t81%NYiBynIP*)2qiaLK!cLQ>w;PQ5^+e_ZR?GT;H{$)?oDgET_Ja`JX+C|7P>ocg9@bm3vvu$S8lg z^mU@Fxn#Qdyyzheh<+4?!tU|Yp+kI`8>AMt%&bgTJQ?D726-kk})bEn-W zd?OysMyGb~Oh9Mf*~RZ?{Gxk3Kec~n0=hJQ&*Bj?I`so*0y@)|5kKiW)f=7qgEIl0 z=~*3zqh!E08lCz@23^+odeN_dKK6o7=ZNyj(ial_jnLm>^j(fQ|AKU6(JS53ciLn0 z>POB5^rp`xx)-2p{fkeB`jay`=%$dTJw~T~H5%P%(6zqk`Q7s#bSt2nYWJP1pE;8w z-s_?3H9GaT(dd2zU76`$so#x8Cs~NiMyLLlL6_D(#?m*o7@hjzXmrOxx6kOTKMvQ6 z1yecChpyS~F}Hr1lkRfpB6k0`_0JJ>M^5&7CDnXGAUpY|fdtDhHk5vi+U;eK#UI>?ia$jWl+X>zt=-<4;xP>f7(Gws;eEuVbI}LvZVhX+q9s%7y z8m5uqjN_tz-jC-6e*{JURZ#TZpy-!^qCW)`y|#1|Zy_l97nv_qF3%Z03M%|v zpu&F%RQOe(!Y>6Cej%vvhk~N}GxL(@?gd4+1r*(Xf}&dqitcn!bRP#r7Y0R_2a4`d z=0~OHe#0Mw3U?JK`VLU^Ye3PT2P(bVWsv_%ets_41Iqs)Q2yh_dcJ>yxoa1Ow}SG& z&QL23ER5~sP6;HLfpJMJOn!D~(7Qfda62F%W_Za>b6rWo` z(QP#Ms|~+k`1j_2zS$*nC4SY08lzo%Gy6vjCBq}SgFwaeJN}7oJ1F;`8*VZD9*A-G zb*o&WSfF$IR}|r4bU&5fVQK~x$zi=dpX0j>>kTUmqlO{F0n)+W_&&p4!!E;m!wSQw zVaRZRczGP(XV`1lWms=mVHh<8T)4>umcCLTkMSbz(q{_RePw13)-hLzo?oyo;nCAG zj>vqHpVNzPD&&f^scIxh*mOWV4eUoR|gLT~EfZq2jx2}2+>rQyZFM zX}+dxHPR#PR_-)bmn!g?E$iGHoynP{yxpbTZSKzPlv|u@p3}nwcE=#Fq^OY@JFj8I zs!pdCmU4w}4p(U1o1v7-Iu^9rb6VEY-X25CT2pVnIaI?kUm%s-tZT2+waH8;tTA=h zbt;{y3$Ifyv$%b`sY-VoXBOLu>2{TZb4UfFU{6S=2<#~W1<9cB4j)uMt@MPGPdqs) zBe^(NB`KLWHO^deaTN@3p{RV_9Fe;F*t=x@Uw5>(*DDOB)$E$y^t0~$zUAV=Op-F< z$8Z(uKi10+W9gE6U{Z2y8n`goa&{5p)9ZXm7lXeg(Yc6sx=HaHMJ{f0kS+@pVKPkT z!LlpEEL*mmEtp}GeeZQpPC@yIGCh6ieP4bDl8cM5SdiIl0b5C5y0Kv{<#Zsqy*?&E znRy;U(E^{o)=%e_H#?A=U4-(NiCUqx8oyrn9p$|;l6W9FyOJY)pb8tWH^C&m{8(l- zdkX)58lX8ml%|v8TC_9DttPBtnbTcpFg%^90zd^iC*6T zGQOKRe@{-!9D(&_cL~KFGkb-h>k~WXwCa@& z?>g^%-9{lMw&S`k_u!bWb58o$6v%DG&|gA1XF^QhrFhWY;OZ*L0ZhJaJ_GPk zwvryWbs>HuKg!l5+Vh;Kn92EFps&^lEBqCK0deN5M@0$$VrBf(ZPSrkx?rT#_gv9G zG!Koh>OH7U6@mj`6zu2I%`Oys_(I3Q&iKa@vk~5?M&WI??9M-)n41?*jQ1K=2(P$1 zqes-QzgIk!p8t(VQ{RDHd+L6ngwK27=}407s2(7vq1YDv*G4p=8+&lwFB`beAr;=! zNkL3?VllOsUrQdN$k7F0Edn}FthqRYcm19;pQ^uU2 zt@8Bc+()_dtxdO995gtVn^SP$Tj=je9Q6ii_kCrb&(hDNzOR0vi&#h$-wpm{9qk@; z7ucu?WGC< za;G;&TuMm3OPR||6m7l1Wi^QtV>@Q$seJgdT74VzI(2!9&VJ_nRlBYQpEQ<93-lT-#h!c$H>NN}BF(-AYLC1RB8&533AYo4%H_3fyTP$G?b$PKJ70o!(qblkRZE&uL znZ3fWOt_=M2IsDgvSMO8y1LwhW3tXUNq{6*|C>i{g2Fes=$mK->l3>q$Nlw1p!?pK)fN7eS5b8ZkLn7GIF?c$8W&DHCZZm8 zxcj~i+nf7*G~d||G96B}RTGbq;m5q;$KYKoDE0qKn!KOyG#(d{t0uMgC2F|~)Ua!J z@lWHbwR}}T(DD~hpp!QFLibXbLCbgjW#etGd?Jq7Emj9eLM-O< zg;ft8Gwb2|_)!lV)k2hlJ|B{@1+Fb|2J$~&l#1!)n-x^`9Aym2G76I z^Zys|*A_rWx1=%cF6Agr?FX@+5FcbG?*B@xdk`{I%^My+^?JgK#I{v1rg~^!qzL>jACUvXb z;ohy{#2s-V&C!#-tX4|4V>F1I?Ll&SuaPPeceqcSCXTJkvlFN8nkA>FlC=``a#~v7 zDgP`>)2Dz6qWC8tg?6aO|FMcfyJi_xMideSn^e8W<(zIRor{QbvuR;cve!qdxyR>6 z<4b0I^NFv~$ETft;=2Xg){Y$Uxmnl^BqoEIika~VF-iW(H{$3r(m*=Dtg;5b_5tRB z`*~-B-$aj@>+WIS=dOeI)+JzWsgFU1`aBZ-W{MJP;;A$S};o@w&|> zJn7Pi7a<(+K0+II^Q*OOjw3GIY4SU?XMZaAV@$4(difp3{m9L(Atp|T^eLtRU7y3; zs&m?P*mUGOK1n(z9jP7aOZUG<^3Tar!ipyfFF7nd%-}dKzkN&cJr|6WizDcFe4Zk= zd&aI0au&MlbCM@yJv@ap>qvfgkr*0f?rs6e3g%M)g*&~}9%WLeL+1CA9d7F=d>J}P zrWPVb=uY@Y5YCAc>h6Z$@k75v(qy`GYB7NqP5gw*L*Z`R5N>j^ZPIk%w04QTNhD17 z4_(va>R{nS$>SpPgh16|&Kj?S?NSyX#SgW$s37LzdufxGOq)wNMG8*Ch2$V^w^))< zL>=5Ctb0q`eIW;^o4SeGXd@mfW-@W<5NV{Q^onHbVce^Aq2fA?jpB3q=Zot{Ql z?+5B-a)(Du+#Z1QZZ0$Tq)s%dUYAt;Xm&8;fUL*`F(W5F7IHn zZsCvqc)&SCe&B0X*G0HHE4gYc+>d3_SN8Z2w5w&TPL{x`a65P(b|eua-`I~o#l+H2 z+BkKO^P|`%h56}P;zcr`Ij!^f75BTkx31XZgegfam!F@aFBo$#Uj>h^t9sNcW}DDK*swVl8KR^rJA3d2$FhHwheNl;@XH_zD4pD?}vxGxDwfOiMB3&8CUKDLPqsIs2A_Y8BugEt;j?1F>kWJ zr~HIBT+PT1A=$b%?i@A#AQnzArN+s2PWh`MR(g=k?aKGVFipH2)53*7x5mEolXM~EAz zNtfsduv9UrTJNL4oXBy|cZ0!Avx%yS0w-;%Tz6HDAL_8BYF8@+?5f>gi9a$@-G^#hRX=!ij+)XR#&<279g_)n*Z0jS;@?URP@VinM{CUnrq}bl0ey%V<+q zps(lDm##FKtg8{Z7SUCgdPVWm?UN+8D{*UAq8Cu2u>{k;*=J)XyiCMHN^bXq+V>qm zzBk)H)aN6N7zXmfLA;R)@1OeLWl!%HD?ELQ*!vX5|;jUB5lX$nMMk6+M^i0bjH zSFOFYX>D`Es^c$Q)lt;e)Y{U%s-uO2k=l=MY-wz1KVe1Dx}p=?Rur{1v~^row0hO@ z_M-N-Mm*Pcw5?ix{F;WwqIG2_FFX09;~Se-wXW%0d(rXEKltz$TGY}RZERR8A>Bq! zP`Z$#m71HP%Uf1l7DalNBb7MRlXRKrZdBxJI@>#tpNwS5L+x-cp zmdR}2Mwhz4)7R^P|I@oZkYOK9W<;>4a}I^B_c+3Tv-#WSv=RRO=3frxl0yx4RF>kO zOHR1eI9@%9zvNkDR`Sak-u%yZR3r1(Z~hzc&y~JM)2>lj{Tug!f#^dT;?j@ zPDg~db~CD+_U7ICs5>-d(TtEIod)kJezzH&jUzefRzny0gXd@CNlrQ~I`WK8*EdTEtL-oCc0li zx5emeT*{fgcc82Iljo=L$(bO(Y3b9w6#I=%<3I*oT7A?&SMr?ar~W(|T?ce^M)zL% z_&Rj+jLycdocXv9x@OZ8&^VS6Z(2THfUeKv|KBSgIs2 z=ykbJG11x-Qc%u<1)l@M*(GK!yKjP;{4>dz;}! zhRZ;@a={6p=ssfZVZ%JbcbNZ0*9$s+pyF*ayvT4FsCZ|BqC3{yKWRACZ~`d0-?6R{ z-F8s?er~wM@Oz->t^h^1(%hFB)*04-qSHMhq8o4SL#(UBcfa8apyt<|EZ2`sNmCvWKX6i#y^VaunG`2ci#y~JuHeHekpl-XjD#z zg@_l{;|H(^`wV*xyA10MD-5HCA;SSO;ldmC8g?1h8&()b4MTkTUm zqlO{F0rJD+_&&p4!!E;m!wSQwA>hKzBps6959CIrS8*5x7szSuHv1lv+k8g!xCQIs z)8Hd}u>RG2CVQ~n-EQ>3`W7!Q-){@ewLy4WziRi-$;*=_8O;N-2k%ecH+%5Dr1Fq| z@P76e!pI)HkLmhx7oKrM=5n(K?-R#beBL({`j^0N4eJxsv%&}OM{k&a@IG`-kY4(` z%#FrBc;At9rospBXTLFf@IEH}F8K%VCm%L`!TXTp`Q;zHpB!rG3Ero-8o$k;%ti~} z@2#Q3Eqv7Mp8~}%cwhd!*;@%G^AG&wUr#(T5Ac&cc)xEp{%XH6H-UJk%%xfOYqIQ; zO;6uL$*E%CHeho4%v!}|G^2YvpG+)U>oJwcMacLAksA6U|Y?y z_=;IAoohL)cDSUf(p~(nn4Ni$1G|RH;3tardtUMBHm?Nd6~{`@4bgxynqI~zdK47_ zA4QItcf^78DBk=0<9Wuf%(DyC!_S69=VH^7`6|D(vxbxvd**q?8?*S`V*DcInduBT z97r!Cn4fR4d8!|N=|)wWZVseJQFoN5jKXtdvGcf>ZDmE zJ7!g=JcbX<+%e1TEpUg8!j*E>#~XX}6iak>0a&>rCve#)kKp*t9nLj%H&OQ%JX5w= z&BKrDh96t`b~o-E(!y8t{ds>4Uo|VbV^$RbheLL6%COyrEw;l6Qi;rBPjT$-#c|lS zStQAE^k!v1O9X6%-nQTSMZImGw~-W4Dl1S%ylueS^1N-AxA9+;{eTtLh_vi zMf}o|rDe>H?m*_Vrsoa`g$5;!x(5=_!CAxCDx{NJjwNR!rlvb^>uOK@K4OlQOFYy00^#CA_r)4_#>;wEPhmy;wQZ%eAM}Jwn`D^rY7&a-nLID=GNXriHFNy1JCl z_L8&G%}XlKJ>1qc^mu&e7xBii)8gg7xcoV&*VQCC`zw=Ur%?^%1c5)d*gN{Yt^!tW zs!9H2fS6rqcYn|uDt}lE{lZniLzh3~DnO@0JAu&DZB8!5PEONC#gyEamt%CdCPS*Z;*N^=raaRLPpnXcgV!j;^jo2Bdlm)=jdS&~~_LCnpE? z;flf==UY3XohSn_c1Y99C8EZNiMRCrRLqk5P1OZL6lr=CDo>NueVo&Fb?sI6&-=(u z$elUAmse>D<7I%tIG-{ZwJ z6S1>Ll_aZQ*B<;NS_U5L6 zU(!!`u7YDdcPLPf?v-|bfR}}qW+C_YY5ExV(+IOOGE>*7Ks)o@0^s*BDNH;36)nVd zHRby{ODKUsUjlCujNGd{wrZjqnR^A2QlxrL)HjyS~{nfhxQ2?js$(iEV(K z!oI?43a)!((-9pGIU2UO}$bSO19+5LtJh_Zs z^GtA&BaLQO3IEP6IOk(>YTcOS+Y*n(K+QykmXYoaMt6scb&; zUg3h;xWI>-?87ZkxZ`q$%P7-d@x6jF{VhN$Pbcu!qMV^vU^EA9uqJVb>T-BZSmEb0 zt@lj_cxur5j`YdWcM>A_jFMHBGXi?w)F3ZQe4yDr&~gPT&mE}yi+Q0Au7CVu#OpBM z;6qOEA#YX4Q*wsPD20c4U7{4807zsRfw!KTGZgoO=Gi#@#fW>Lg=2Pa|}S;8!MYJ)g4~1oSk_jVhzeiK37f@pU+B)(uuH z>F+yk{p1%gM$~ z^U_ApLtR7guc>K|!{x)WJh8;}37S{0GL)-N1oY5!K@(4Y#kC}j@2}Iy;yY%KEDRC) z_ge}ee53Ta{rh5Syss&DEVkTKN-~{>c~F0`^1J08Bzc4$Qd;`kr@F*H$4Eyqe$QqZi65uL|7*@9 zazfqaLw#6@|F@i>-p6S9MJDQC)hS>j2fd79oCP_d#Ewwk2ev+uGt}@-pfA8`zZYYc0aujq9j;&~2)e#6 zoKu7S12-UK6+|KBlcU(O%O@B(bG(n)_{ob{YW_}}yFKrNZF{b!N0T}mnr{uwW5IA& zm#Z)hP2Op=Sv}R?H8oz6$7wOc?@R8!F72Phb!pMNt`usMPR*>c`-)KL%4q4+3eSzo ztW!=S{&y>feihROR&_`_SkDFfPQD#1u3VCSrAEej!oA<7Z#U?0L+b8J0CgwP*R7vn z_jqKD4`&u~)lTVS8AagYUNTf)k}-etD#&7LzwRBN!&GWXAJ>xpTrKIp>PoNYihpC%k0*jxJS` zc(FFI+qDo@Y%0=RhxVksp?<(zrN)%-`n3qnkxO1pgZ7l`Tqc)afB#mc#zgLqVGT^y z$SW&k48YKxovf`TKN;xtY={q`k8y9pf%^?voMKRu&y)-w}MxOfR)X=H+P z=|3p?&>!UgQSJJ~S#tZitU|-ZbYGS?MOU<} zMVF;vWz*`*qANPvq_on2_v+QUY@CnI3V(h_Q>#A^K1Fe{j#n&>&f|1?bX?j|c_B!9 zluzoqq8x>tj-qx#Ip^gKjTfa9U|jyAN6n172d9YBtYhjMR&%2{>NgE5R_Ok7CAVEt z21P3Zm*jLX`KLr1xQMW=s&7#iT#%t81rNU@8=iiq?m z3YRS(OEIVLOM)WaeqPIkou<1~bh?y>rn~%b2&J;&i?Y3g5^o&NOG9+UWosMO;G_V> z(W+G|qL)d%s0pnj#nREiNs7Z!`rw?!-=@f1pfjT9H+dbT6)laOYns-IhDt^CD7r@K zN2}KIxW+kB8bNB$cdQD1I;&dz4F%-RQiwYWR+dp;);@&dl+Owu#3?{EP}uFwEuE`Z zI5xDS_El>-S0lQxqBx`&tn}YsMJvF6r=HUyde4Rw@c)3d%SR+oQv*`2&-AOUbjK&`{a}zi#QBW-3ekA)Dt|QHMtj$)+%N( zQrpF5-6iYzM;z72`iromFY|SNx$?K!{Q0^oLoAu5-~8{w zIal~VUvRYed-)P5(=9NAWMo_u*Fqx$@s@{#J}5(!bgKn+Tt){Y25Xk-3mx zuJ*Ud{L36wj`A`8Z{wey{23m5e&f?; z<7-ZS&qBA)=-w+I>cas)8*g*+lRjqXX&-MeKjbQx#n9y$T}mu6$cM{RD0CbseawKL z#$jgyx;fqBuOD~ASncu1i2g^=RQ%S*uW{L#fc~uRgRdXolM117e-`>aqqlK7XTByd zSKMZF8n2xR_?n)d;@4KqW~0-%ok5p%Z;;~Gy*d5A^Xb(%?o7Zp?Oq?DbQ;$)=yK&B`sg#Bug3Wd`n32bP{y$VPp9#IG`f?ZYc>62wV4dMwD!3e zxE&vE$i-LnBYn(P)3?<; zF&drpF#|nX8?SS=Bk5ySm>#X>jSPNiE*sx z`lOFpVsx5UGWez4%O!oxb*7iA`6Yuct=&{X*J^sStBou*9;DH&hHi_|*?co1zpCdO zq3boerfhyW+P8Gx28>?wkTXI5vVJoS#}}Y0G`(A!k4D5Vx+x6KfgbO-J-1=HwEM$O zgKnqs+nr69H4Z3WtDz6{bTwZ&6Qnao`~5ofd8UVJ^Ve`XEckxrzq8QCd%^HNkU6Me zGdKtLe>Us^83qb;kHBo)pJ!gJ2A=^bmi!+Ye%J66P;`fbqI-vVT6C`&zG!$iD7uS4 z#@2$*fuf&f{-+tvFq{O&@!!e1A_n$=ve$zwH4EmLyYzBT!~IV1RPZ+NWbhlH_+JMq zJza*E88(~$xn@7haF$^y$gq%qGaYUQe6BLQ6jXd|p!_cc74I^$F9a2D1*mw-4NovU z%KSfU_Ja)HVf`lhK~Uj;W%h>*w;TQlRJ>mR5%n)xYq%WbEw1Q%Q0YC(uo4u%PlMur zwBZqkhnoMZtUu-d7sKZaZvn;kdQg0?1;uZT`L8rwW;oaUKWlc$P>Jt!!v`5~RF8Lq zr-OHbyjm1|4OBgU89W8t2&x|2L08V8;++SIU)=Ca!&3AAxY-XkoM3o2>wCqkL!lM# zZJ^@40aUyjK*jq-Q2A^J72je|@hvc%YdF*Vk2U)z4W}9&3jQ782N}SW{(HesWB-4^ z6Tq9nVsJfJ#9u4OW_-~e-eXu(%=`(c^!^8^^!_WT^j-%ly(fXA!`h7GGg?|c^{V~G_4etW!f<=-CapMPAg*_i+$}Ujj z!W6u6u;=qMC_ep$_Z!X!k0ab?z_Y=l!CBz`@jl#cP~m=K__*PXU?p@LK!Ox30u}E` zpyK@$D1ILY#cvQM)!?r{@q5T{yWx+)YW#0C`z?n5XgCiPzcWFmvZ7@lBV+~v0rB&x%rhSaT$j?r+a%;G@y>8iou9 z2<*Ze_8N8>)*DtBMh!!T1C$1j=Ls_;UlvVKlumylnn;9bo@EdAA^XX%>|K6b483jkV4w3Y zc*{R9lZ=0`&-b9&gMGV;Eqt(#cn``)bd{#Ta&KW3%({4D#{toXaL?31(7b99#ds4RZES2jJp|Cq(^-?P$t zbC&&#EPmQ^N$2OZ_4QdS{rHFUFSYvgmLfXOe_C^2Z`)_Lv}Jf!Bae{b;J*WAI90A# z5!fr++8Qpivm;^+?al6>1b4QC`%)|?^F8y-`J84D95bQBWd@6{3RDrc`+&Cw5)ZOc~y zICHw}iq%bRFqz-huvT;}t(WP~x3KoDdD1b1Pm}a-JIw&@`MV+D=uIKFOZ5{O{%MT;_GQH>YShBAA4AtZG=TGLo~E zmC7*{MCW992MI;+JvxohSAUuVskc(PpkZ~VJAFe{>&_;&(>PoO4Ij>7CFed!J1=o_ zj?nP+yl3uRr*6ntid}=!|F>LE^Bw~Zw1WLD?YeIHmIlBl$xTq z*1TYCN3%q~aN;w6OQXDeRs)+KC#a+gn($xMaoKF73g|qNBgu5Kkil@~3Pt=>l8Tv8pI`e+dL;1a}U&N0oDAdb7=;y^@wDVASS(C}W zr*^>j@UH31Jl07}ktrkI>E=M^jYPtpTJMcAUAFG>Hur87JUTqkc_Y#^m8q~vc9Y*9 z4XyjQ+s~C3B`|Cbblylk`<^oW#;-p=Grxzv&+|rh5TWS zOz`cVr}u9HeGVtTj=XajnguAl^`hFru@~YKOQHc*-5+RbIQ@<%s7>Uyp9PTHK8L#4 z`bkJf3Y@1@49<)vuWAjH$=COV*FR5Y!&1w8l@O?#0}g>! z!HnFB74Ju%02VvpI{3*9eVtg(*|Avny>+Nj#==!k#gdO^+P*LS4owift=(wM) z#?wMCwtIq6s-RKrjwK%G92-l{tDqdOQ5HK6jqPv`Jk!K&||pJf2RQy$5X)8eQnx7$HkO%M+FL*g&pJh zU!u#5zew7Ll<+TBxO%B6|6*Ck1ofZ64_oO#dqy zNlGIs`@D%@yegzT7xHh?f}OGCvSw@(k76vO7#|2V@e|uz#m1c|y1&a^^;5@P zHIcc^@CSi}^`B=>9)_n`mDxg!1o zZ=D*FxT3ErSy;XPFX0=u`U0=!2ASe=RFJl1hkP5BqfIu3V1CS}ea7QQy|6BmByzUuNnh1ZWmnq=?S;pA?B zCjZ0bfjZd5WwGSB6|v;q3R2Tk8H@ESs*5Eqi}|B`$}cUGs{M|-!EyAD9Wj5-(+why zCAT^#evOcdSxh|5b%VSlSUx87o zE;|mdN&I;a;X`TZNsaKG$0$IP1@Pm1$E2VZQ~EznV{W_@=GHUkZK+I-S1ckGa96JoVK3G zUYnl6s|0gf3}9{>%i?(J1>`N)+?IPixe@9d`l($bok{Z7oU`;6gQ?T|99gTwCdeHHqh) zOHG396|MT_Qx(CguOO{|zMu8q7T%0fX@B4AKa_b>N{KElsroK`J;!-)R{!W@QvdJN zCjG)t>pPvcR8117^z#8K{WJ=5tG?iktn?sY>cvEd4xJ7?q4Ry{GZgxa+@Vl;Q8Gl ze)=St!7p=cPwR8spYAxbrf1ETV0_R>S2fKYZ&WkQoo_UMnmgd=>(jcR&m7L= z!obP<%&^L*5_%$|g-d91;{YV_gwIMmas4!BPg|DPBzomEcwBAbTQ0xpYj!=$SH>@p zO|8_u+4<+p%(?RdH8CtE2yJXmA?FH8R*HlsUiQsoguZ+%c~zeG5}nNZ*ZWLq(|O&$ zJ#0ZKp&lJ35-yw01bX8#J_R^D5eqrZqT<3Xb0# z3${A_c30tar?-hpmM%j>Lu)O{oa_dg&SJ>rJzD6L0G<2vKu6GYcF+fGm1by5)G1|2 zB~v@yDYaL2*rZXIn|fFcHKngJibm=O(m%bht);UyI&-GiUc3Bqlv}mY7jHk`^u`Ju zMM}%66Qx$md!SgR+K!^K))4i~R;^%nZq>?FO>M>K%h_(-c`Yp+Udd9CWjb37^8*bk zRFDF_*Oc~}N_ADo-?dvD!)3%KX?y#s3)f1;GOHQ35$E*bMp5k>MJn!~cC+erSfjLf zIBd=awW2AbNp)W6HNc8}@6rDxV`DD8gH5>0%wUkprFWq3%rZ~%%cXa***5+TX0It1 z|Gq<9@Q~yya)sAn2Qq`ipDX+(-uPtl&}F4Ve1FAn<7=K?_2NuGpT_qcJStxIbgG{W zx*U9UY+7i)rw^(nB|mM!mEQT#?Rmq~rFLb5_;c{R7Wyr3dU~tJ5%R;z*Y}|7Gdio! z5p=)7gCix zHoOib>qUPLD*uuTQvRzz{_+pu-&E|f$X(mwe99=2ZV#U%iY^5aQ7Kvtsy;3NBVZY* z@OMyL3ilnuYeB_xF-Vgr(zhC=uL@N9W*Q=U?Ci+eIr=F4_#3Z(!U5cceTKb;U553B z6^2nmz=dlACBGDm-x}+jd=rHsvz?#p!T6~~uJ+o3`DB~fgZblC=$$`}QATh4vIpZg zvUScbKN-o3IDaZjW&=OjgZX9*&-|r~;TD|2*94rSYx&D}j)5ic8!l~=crYJer+93Ao?gGW8VDB)F`2e=9Ns`n;) zuH+09;Z^P&<+o;IfA4b9h6S#LBJ7~M;INn1Pp|^z^$V0ps18>ciHVD}2!g+>=&d26 zCbOR;q@RXhJtswvrfzcVDYQ;&Bm);DOk@@1`2_azG3mv3Zm9-F%Z&bM9BeIJP$f8WUP8SKX+ zZ^X;V-zDPLU+oMnsPFZ08?E2EHM%c#5!bI;MAw_c`mR4;F8vFg&NZqt$^7|khm~N% z7eusge__`37jq)(uG;;yb<3`|%WH5VyZz|Af!cfOu@o*M?Rt9+;lT4|Kx_Ibhiady zjb-Sj%>3OAi@$q)mg9%(oKI7FL!!C+w_mCxfOBY0FVjhIO`|L^RdFGO9Vj;uJQvyJ z8-z=SqZIQ_Z4C#Pwd;e`k{Z+!NzdjO=_Gg8lx}KAKW-;;_S6|)K*G>8An(4bxX1P_=I_l}kmh_JY9#w3i zrk0-bwRFF`HR9pxKOrv{uf^Y?fqjwTxv4ELiNC2WI3|Pm+;xetUh4WAQLUr6{)Spi zoCB1{lj+qQJa^L~>*}n&k2_>kNt{K<-1>ErF0EkcZzapV#c=MpZ=G(yCK$_LGKosNH;cp#mulq?d#{Mvhw zqxv^LsB-1c>2FL}H|VAtm^_I4Sk(T{yx8_%5!(M5Wvh82+Ww(o81n^fTU=h3Ka(f4 zyCXYu)y{1PcBmoi^syc5nej{101Yy5ib|jUs;}Mj<6NsToXlLi$S%*|cu&`G-d}PT zof*m5$GTeL`&!V}M%ZU#moKZqvU(qK`q5__V`n}Z^Ah;#2N?Bde1{e9@5Jspka#fm zxd$5-JgA`3P#AqScIJclJyK2hC!UR+@wg9oZ{o4o=N?-ig@n~v3y0pqS&!6LPxyci zV*`B=UuN#unOVH|R||(^_9J-hZ&>_bZ1;Pa@fs5c>tmmrSn!+1#8+dVdtt%R#Rp=$ zFT$gxds%`zQ-+e=k1{59wsdox>DoQb-3OB04^R=QhJX3mwQu_?*B_8z4JJ1pU3}}v zdK3lrB30g5(Em|-LP=?Va^ca1k2XIyt_x@~%j(b$IEvtbnY%xs;Q9HsW$|gT9iMbP zvbmBI&TAT?;0{qnqxPhU6IdkbEZ|}i~Eiu^XpdT*Bd6!uT3_;u4R6uu79EVwUzPJ zr1|xS)F0z3T#NJxwA8YksLKq4_6H~9gE5S^h!}DJx$e&ye__g^Yz1QL-1j?_r`O#_ zLz$Rhp=*App>c=>4Z8p3O>S(US>rnVf&9>jopH!_ct0{0Fec)w6Vn_R)l&})(miuL zH!vO!17q>XjVCv6|4Msn`e#q=DltBO-@0p{eetug-F*2B|SEn%+PncP``Rd#lShO z=|83i&?}OVCr$MwI*t1fj}1I<>AG z|9o^E7B4-y{|!m0>}{mvZntEI}3UV1V)ZQg#cvNdx7MQKKp?n{(pm;r+( zq6W-wHDEH-(UMzKci!HFa^Roa0lx3m zUcsUn>QKK^|GS}vH_pTD7~jwstN8)*bI0R)`?}s9)Z4f9_87f|PeD_*DYhmnZI|(; zYRJel4%2Ub7Q5?SP@Q@2hNjqAhnh4E|A+G;*bye%`@nM6!&hGk)p<)Fxd7gf;?cTu zLu|onv{M$W9ZKJl^gcaI*zuVMSOG&H?0%B2T05erJ|9*8tm<$Rng#muX z^hZkV-j8gYW?GbedTGQzs-#KlQ1YNl0^0M#gC~H0Ww(ehGFB zB|Ge$=)-mV8}DNTpM9%yr?qG-!adb5O}pA&T=^tRC2!2R%)ZpSJcR0;!j8sneH#=( zL*n}lvCrMFe!F0QQ{ty6;WE^llrK`L`rCS!i;k~88#{1FI(}c>5L=D9-K7+vYAqSB z`m~yw&|f3fwbV^6sOoGL)w2341mDlm;7lD&sn%UR?Id_GbC){80=}{b?$HO90?UD! z-~hpPGNWt|c5eORjxSzTk0v+ncQeU3O*`E@kz(lZopSR8Y0uQf7>a@Z!4LeTG1Ri_ z+);U57QBv}pUiwwBP5x*OT)$?o^V5laH|zqJ&mqNw;j=4ZVcmAMDR~-2PNY_v-ISK zB{SytAJIf`%dZE9n=}8F&r@sqx&BRjNDIGr%ty&gyUj<<={J_0k8(T}rIgO?A@ob< zNPjd7S?~m;^1$CnKay)vG$-cu+sLW1?7Czt1MIAkEpJv!CQtN}aqO%Ej4s!qVjuWN zCYB=?k;B~i;K_{ZWXa4fSM?`w%NhlbJ511L?Yn&AS8?qcNL@34>xtSSBkj_B zjW&+^@AJS2^z7b(?{kix9naIV%cr7e|C*}i9Ps>4ebX#d#cg1r+Rw!fTL&OwKK~_#%5bGe2YDak)eQ5GWMIE zjIDN)f%_^C`48|<^i?j{vB8C1^eW$019kKlHNkLpMLYmp(>cYDxdCzD+Hew~Ec7l81nCAY7>~$#ryz z>u~JQVa}QP5!Qu8apiSkY%%U*$9R+oyj7jy!e-^v79`1cuzP z9s2aSfKr?v(VX-s;ZVs}xClS453&mwfX% zp7ppN*5kRS{sI!DF>xUFxknc~mj0*|H~n1ptp(pse^C@rs~FPsEnRxubz^(7`!Pse zeV3Bm-{wuk2mD9+7WYx_<_qS?2tU6pej&DdHVGs*I&b4cpc}p@1bko9N2BaVN@Rs2 zJ)1Lc7}db`ALH1L6B!fm-z|$1@aw!w>7O-~fuCu`fG@_NP(W_x~4Yi2m0*)?qK-*gX@ghvdf!m^PkN9{FNRre_$IB)O}J zS>`Lukp2GvrxW;Oxhhy*B6AK7&i4A-kQwP$=^S>owU7%}TT z8Q1+XuGhtG&;Cwq*hvsK8kG^^2AenI7nFf4rN~V7r#fYBa!;U^MPbpLyyY#x_5Anq z*G7dC7}F=A?{N~0#!1!K>(Hg>V$W-qIH?oZ`+6esN~t)U%zHJmoH}rI@t#GFlR5$1 zC$cs^3z^QzyjOQ{+z1d1oJ+EWt0%TzwsGwrS{c+ObXIT0sx2GQ&qTv=OV8Gge=b$U zUgWZg{`K$Cq3AlL-#Nb*twB^pbw2!631qo-h;!d|?!v^1b(@v#Ke&-z0fyQyGzqi* z0$56~E@3fP>XDfgzs_8m@GPbGmooo)U@81r<}jHN{-yL12Tyd~(&dqvl>U(UBlaul zAM{dAE8`!8ztV##ng1C+;=2H)&Wj#3|2y$7mH$3Erp#Yc&Qj%1K#R*f%)gYs&Qp_l zUzzw_aK18o$w#U9aT9b``Cyakug?6h!M{}ghs}RMne@j@nEK8#{$XFc&KoP0KkJue z&$Hh7BR`{raHaGN8_9dh!l@rS6Z8yAoWI&nfHph7*ZMV!1*gPseZ|t*OiRwp=lK!- zi!7Y_w=*GJM1S%=Ji08L`guXPqV&(i^OyYl?3`cqduIaP68fR@!5O#neslT>A-qLb zep?84)bQGPC|Rz4<y|t$KO`ed?%%*Z6TJq+g^zs_-p@3FrT6JUMfW@YfT*+RowC_?jyGrwG%2#P>&y zw}S9(lh5(~F5wTEUayV6N$sJ0&tPnfS~!hEXF|S9)QiruPK^6}Xj~SAFHtX7DEzZN zyvFHN;qN4T{V#oZjoX6oMdkcczTc?4)V>+WH@WsBJY?U7G6+e{y@P=(`*lG1&*q~o z_luY}pgI62897qx7 z&HMeZF;D{9|D46-sgY{_qRZ$n*l1_?Leh_y+P^Cf^yy}v)2Rvm~cyg zn0d5~!_x+&tDTYrG8Rv%2hx>JSp=jDol*y+=}#do=?8I z5XJSYQ&PU%v$_n{8%!9iFgQjg`OV5295R?P*k!QZV8UR9!7rTSR9_Xz%nSY=^P9+`r2YN&GCVPrJ%IvZ5f!@-+0P+v?$Il2Od!V;?b@o7C zU2Ne4J#vou2l`5CZHgc0sczDj9&#|><3;v_Iczn1pnt!MpZrt&WiBJWy*hhck^QT9 zM*ZPo3hWv$QU6Sl{S!su#kxns>suJLzrDz=aTN9MDYE~(2;Uov;tv$rA1I2i>*1sL z&nOC?Qz@1ftDO^N+Rb)&lvm@nFTa=xC^4lX>xE_%3~5EuFe&F4tUc_*I_ zj&$Q5tAbodU2-RMHFLUEL8wU%m-O_K0ghGU@~nz=@4GU3Xr0o^D^2?&>+&bodET~S z-3Ao2(VgDn5UuMqRqFTaCPOiNb z6%;NwIL!H@-XisQiQ|eRIPyx_?jSFpj_xv4uD13j-GO-uf9zAyEJwu$qWL4ua+=q< zBpSjQX1L_q%1%iOD%rX7!s-%vlRGc$oHFNy)h#YQFUoKKXw&BzFT4oS@Q5^1r>%H7_Dm~>o!>8|v%#h`87^1?`Fdy$f)j45x#Fsf7 z@Il8$%L~oW>qGeGe1J=*NKd(r3R9bBdFY!#yquo0Xp8VyT(=4S zNv!A|k^&=Yjb4*6E;(v4!|^`pRZ?p_dA=#Vw(RO*;Zj!$qb4@N0ZINM@0TTo2-?ES zz;C`UMJe)P(VSd3)X&Pc2B()yg*0cD_p;*6$uf(VR`=JS3)y$e(s=(H$>E9oFXW6F zudqRwS8*;w4fctZiN>H1?X)$6+%DkPDHu0DJ?N^k%2lNkZIE2@V3TT?Dn_26I?c61 z&?RjeZrL@kvqY0P$+x1oR#E#jz5K26vLsTrVWbjt^L?t9eB(sd;Z=XzZ>p;p;1r*C zti3m{hnA~P`ZKkduRY#Y4M1>p?fmAXr71R?sOKO+X_HhCk&^o0vpcBBQozRTF zl?vmwME|-=(mcA@kLhA##Qa<7oP=H`c^vMpmr0Umx5N`n9gFkOct~TcYVGmPtA8uW zp`TjO<78?Db&6_G*Yv5nB;uxSrXzhWadOha+dURjfWi3 zwcn-El2_kJKZcwx^qJ*}{`X{-_1&_(y8qqVZ)AwCBBLkqUr~t+FzYXecViH@rbE)u zTUNdGEi~6*T+kRhHuA=jD$1q-0<28P( z4TXt*(rWq}{UxJZ^_V+hhJjj#ZKgJDQ@dyi z+c&SUem%Y6$19^nU85rD#-}8P2>DSHY&zsz4>pZD$apTTTW?XcAw!?<W!dF(a)o`*z+=p{_*sQvg^O6v6`lM ztfn;)ThKZfThNq>(1xMw?<6oaLJ~EB@=NH25!lLqb#)2KFXgAF0?IFv)F?^O*3+UU zkMSu}F>nk`)+AV^e>{G>MN#{iS_3>-w>b+X;)z`ezHORvgZFO#<(e@f8c#QgOPJg{Q{SDNqn%NDAK7mM0 zouOB+A(d3}ZQFS4Q6W%o;S=TeI~++6nwsWgmf<5NeYT7S$A#2$>t5_kEj>_)Hw+$Z z+CyBr_;aqQtOwIQ_7RFMq0gXn&zgp4DPp#cV4rTa`~8U!@jJV;zNUuCDUF@rk1eil5V0hHjSq5`hru6Sn9q& zuWDYhyf?NZON17*XLfv^7fp6++;0$Ueu_Y(OZhZnY$z3jf%dWr8f`*CE z<@1L&7Grm421C1a;iG#`>_0oX>z_vnl|H!rrzh$R(wdq71C$$3T#cUs#elAG)hRld z^XB_Cj23@;;3wOkKQZ=!+p(ngFL)%m@lm*^}{ zXDoc+NM(bl@z|aFW1oAVA$?K2IdclTdHSzGZHbs{YgwDzb&E<4%58v!zb+hqXgrRi zD10=TemDO==Y5gW8&1EwGMWBUeB-#rliDBlMPW?NR6THDXH9bP@2}tAoVgU@;Gg9q zuIrJEZ;~aOMh9M#9;I`r{na_v`cIN;91xh9tfyigsUleMTJV&TemHR-{wcnFGU{lh?yHVNaL9a% zf2sK6<}Z0msq*(#DmJp7GU*T6BF3$RDWyM=K$s=-BmSk*k86Ph)6KtB{FM23l}UdL zp^nUa>iKx|56&bG@~etrJI6`=!XRY_N@EaLNVd5yBVU@2c=;g0suQ ztG_uD!WZFJeRL9L{1;40nAOSp#7Eb-vnUH=7yt+?&o1KHD zeq0bfq91WP;j$J^{kb4q5nkov3xpp(>g!kiyC8g#oL<7txa6WNq#_5cebD6MA2iqv zl)Hq_EOoy9fs?(wcqNc2VBQ4dO!CSNy5sYkhsuHZMXod-+mwXXmw+#SBw=A92zxG^7YR@UH7W6f0*Y# zZvJ83t~LKK5C72o!@T+xvxj-|5$sORY4b9=7|tHPQ}y7JfB5c5{w{kk|8Dk_x$QQ4 z_|BYa@xyoH|Ag>1kKc}e1YN}gMRwf_8THqD)SfJ||9O#Ja_eaLPZ!z$s>trdT{{jk94gk8_v!8n5<1l!$4W&HT?$7*IT2r( zYph(c!!b|M$o?v%a6iy-$@>6Dqga@k4ac2C+{;m)8UJf_r;jc zWpeU9Cck<)9H+c5Zg`k8ok{UMVam-JrsD!L)j3BshVPdaYfp}_@eWMm1!gLFU%~{0 zLpHbv`PeCcl5bj41t_PI_hl_V?G~$!c8Hdj>8dxH!TDH7l1B0qr=qE@#z|j((z6-D zQPW%-e;I|*UvA1H-=E_);)j!&yW^F+3o$(tJZuM36 z&rWi9{o=3hQ!>{-$EtxM1Uvqa%*w|{mrZRUfNHTN&vpPAZlB5=| ztL(2A>$dpe>woGuK&Z%vh23rJa24MiYkDY|hTCheY)SXU9Utu%wDzg3a-6;2x1sVB zuUAdnmL*`(dam|~Bg4}n^9`BZ3b3nTq9N^q-txdr=Ws@MCA14?z`O>)ncsg7xJRFd zg5#B3W*ag-8rL2D8v$A~oBNtFJr%g{2`17iG-QaLz z>%u3re#p)d?rWI;cr*KTn-9)VSE^8Zp4y!0pU-g-tLCdlCphNeqRQmK8IQ|9CxMx` zx4GNh!SF8)2ce_D?9nZMgZcp9|-Y>9v>8`ICfxw2u& zMfF#&Y)mg&_<*v*RRc+yI9YkH-i?Ch^sS0?|x)Ct7&%muspR->Dw|_BX?n> zFRMJb)WtipcsdbWHdyiuv2;cgYyW?xBun%sotwj=CJbN zvz7BqKakw`z)t0FS7T+ht0b-P6|V1Hy3(!YZGYj!>vb&sGKM_;>{F1s^s}|t?imKd zf@Y$z})TBB6EBbXy=5#{SE9TELWetmC(!*wja^_H_R;JEsh!4ElEsVx?yaFG0=K%tTuI9`D|1XV@Ww*X4 z>4}bviGAi7uE)w9KJvd$a7#)9tSsHY%FRmcI;+tXYxTjAXmLr4u==@&l1jTs7_-wJ>8y)F|szc9?4 zGB9TTE_8F|t!}+AeK1S{PZ5<<CwaAG-mZWgX2Np%p{C4+_RNLbSZ!yi za%H`G{y)+~>GCNhgAT~{eTNjj|1|dn!^7PG7TfVZaZGN%$9cwX*@>-T!9)G+zOqm3 zU*T(0WQ1GV&sL#gmdq!H0nO>(vrm+jEzYfy2V-H(})E#kzLf+`>m0 zo0D9V>F-Rm)n_tF6+$JwT`!!QW2DMjItB4J0+?&Q4!9>tfXSbbhRm&s$=H9l=9*SM z6q&Vsh~km1QfG@e!L6Xb)6uwR>D+N9J6Ac*esIP(IOv2;Bb?0ExOjZv5N9R%n~Zdy z6skwVzKE{)F5-mCG36RkOn- z*@F6BuJ-lyt%!u+P&A)cRr^V*^~W2wpFh9i#${Hz$ar?700(IySXi1AC4zuX^XTxz zDDoWMLDw`o5vQEZ-H=d=@4x;b&5t;m10(g+_jJLH)T?)y_xEchW=~S>|dm7lXq~sJJm-rY)*CHy+d?|Ek8n@ib>I zNH3q%VV{%_`R3yKRt1orE0Q|9+9{+raevd2fr{(zCZ7uyKEe3aA%_fL25OrmN3Z0P zqlrg^o@h2SzvKEzjUVs6{9Ig@Qb%LHQ-roeK5ySO8R5^Fi6Y+{H`l9Vm`V4@T(C8I z?@8hvZ%@?yp*IK@tPbSw^{_iZ+_FW2Yn0!Y7~p2-E$DP#!_6>KGEbb(btP@VtYF)TUn>1N_qp(EoTdEhD~X6%WEJjHJ(Dnv{1=(rNA2iL2v@X!Pz-%4+(PYM5WYlywf}XI$(_^>3c{QGMETYJ*C3x#e{d$`W9jx8 zchDDIdnaE3efTv+U6PN%#4U_v{f!_pDopT>Hc+lX-f%K_)cX<1}8-PTujR7V1xr*_i zeTqwfWU=-%U^VavDB!MjHz5R_q$$Kh+lFvL1a)tkn!4V)!b+sP>3g6Y{ zej<=1yV~zk2+6CmDh%+SfHcp%6j0^Z2vj-VWAHMA?*y`BSNlgmMDNgh%&|DF50UtbBjb?4LAyHSoXTem$8~eK!Dw z_Y9!$Xy2TmTg z@D{vci`mD_LGm-j58nmtdz3wVXBy2O=H+g)hws$I*!ks5EBTGuKTu>prO5tVQT#U- z`8R<%itp^A@SBUmf4j*4kBjWmV&a!GA1=cGbdmjuB70X+dgm7TpI_vExF|iP9Zi2# zk$rhl{I?YO=eCoD>o;^+h8&HmDZZ_wZ}T9t(bVX7rbInKR?i8{T$!6Z6v1h~jfh*Zec;%HFw{F~gmEZ2>!n!=@8Wr}m z4@fmiR4B|KPSa|7*6{4Z9@5*bNH}wr%xs@$|xw1Lu zrR+ECxniZ|&DIg{rK(#&rc%;#{~z*XIJ zRd-LzqD09a!Eu_YC{66N-Zg zc0Q9%P8i68>Fx{sfTbmTiaX4Ak56a`IbrwK{w-=^Z;J2p2zVYa|G&0*+pMmL;azYl zxn7vJQx>U@%n9Wf`Li-w4fp_4$@NApbk^{V8$Pp27S|iz1?TgJZki<5Q{||Bx_Dd( zlnk$pzl^FdbtHE@~_uY25TELSStU$o`pJDPDbd23n_zj~hC>@dnE36y2#qXbL z=^(ly8C?en>&8m0*DFuAWUfOOR42Codg4@8W?5uI7h1bN(p<5S*LL2kKY z)^FO_?QH)kD+iHzqheJr7nIt~ugqdS+Y*rrOW8lZxqBmri(QephAXrZ>l2pOgbR9B zVQ;I$T8fXByG$qlQhfBF^R1}30$7Rb0(ck$VZOPjqrDk z;Hb86%BM4duZr+@8jo!jPWg2vge$>+eS`pm7GC*xCWJSALMK>-Z@3;$#&m5Dka0ct za)WCOo(^Pcs_gcX%O3Cx?1lfn9WJsOKeS2RMV5r;E*g22gInNG~jE zx371u7kR?Sdd8~Fe$RWekts!AQAbYXVumgDkQh0)KmoZ+hhNmb`E$>Ht9@48ck-H^ zp1y^RkxyhPJsLNWCVYwE%_@%dee8qTl1bR)8|*Lk`}kKhYQRVPSLnW4_^cA&$1B$N zua}26>((_ktZE20_#(s8ZcbS;r0+x}%&Wd3#b&DS<59ymW{qDBKP`M+;B)ya`ut4w zeLSQJ!tAknI||<}e8Eij`*?`-#rrKH6J6vj`hCR9>AMJToWG+pfX8F>eemK#%^2aj zs6sitzMstT&*+O71Qrh_)B6uAA-^##p|`a5h+bFoB^A{BY4>Pue~()y&wY>D+{N}2 z`Lr#@y}2ZQ;J5r8S1RGkp8`Dt|NSRt9@W96H7?^)-0-`OBJ1+X9~Ul3FqcxOkYBW9 z{I0;p%zG13XW=Wju7>krGfVj5HB5Y)vskMeCLS92SxzvRD{r!UMZ#+oEl6h8)Nq|v zzJ8tTF}e8c{!^qAA*Nl3^7}U8ql-4B_!AbaJw)Z)=c(_QUO%_UL)ry^fq37~*;h zuJfpA?e0mSaTB}a&5WIvw4L+1jx5|T+?4*whCzs-aVLv%_Z9u#)yO_-1kHo%#_7>) zwt2O0+J^@?ApO(Y50u=ckymjK>qQ8kB;tDxy^=ja*xr)<5kkLP9&O3ECX-(%(d`CKTvZ-RsW_Zb?7Salr)G)3Ep( zH@vQ4;w#PFUy-WItmf_a(_QZadDHNg2Pc|trzZ?99*y1dJ_>l`^`%N`x&+D07hNS} zu7UnrJwy_|s})~HvV&qq#*f`URqZKWwBs5xn;A&|aiex@HaW?lq<>8b$@S=$>uRX> zIOA*Uc+29S^mAcGeCbhTcl4UqDjYk(&N}g$S1)|jZGnF#Hv+#l@DSa$TBFeRG8M>i zbK|*ee%{TdF>UwzFSmt$?qf0jJC zocjLrwSmWqG8Xo=5@@;GIawLIn@iJ1_KARtE#1HNURQ;G(1+2J_SMTLm9WOiCsrb^*li{-{GdX>85&c$*PS&?j=1)DC6o1HEK8Sy*_;vPOeowjh z=5OEBN%)7S@Xwn69%7b~mvxEw!EEPW%3u7n%fOGd|$wCn}xIf zkq>9_&ICTmzstg@pEwiJEs`fG{nt=SA${vNCGnn5xSfVq{l}Srw*=pFCE*WScLBcC)GpK3@=AJ3rOFqJq-wpF>eJlqwH@3%Kjb7BRSX4 zz$>}cmw~eX4N&r^yMUN^86MESwH-kDO94&(X9F?r+)DYkVL2IAF$si*KBXQ=-*V?x zRs!p=L$bSbD`}fk64)7H?%YbU=+3PqYwp}iig^m&8g!>*dGMPxWH4p0%V531gux1f zV?O?@tid6JDT7@G>kTFh0)%4L4}g-H1U~2j+3^?y%4n>~9_HES&8~dN{Di;!yUf1b z>_cXkDz*H>Jb7{OCrz1y{N*3!K}C~2%zN9+9_FdHm_5vUqMZ~z%yV_Ti*FBRA1|^e z%%R)teP*x0FA}_>zR3P@!bSaGSLFZxBL6oQ`8&SfbJLSfRrJo$Jvx!lwi^iE-v^7F zr)VyQFA~R{qWJ!;o42q_Xq67UU+G?RIP&5dLvidQ6Me!t5l%rVCZCt+z4NCf=28uZ z66Uh)PZ!*8I4=axPn@a%$hj!QZ7F|x=(Tb5eq7*bzN z@W*JKqsIEKb0~U*ej563ia{?UHeUZQUr$#KZ~>ErjPMCnJxJWXl;hklRBw3dg-nKw zn3J(;$z>(-o2_QG|OP_F3Uh~kKj8ISMSa*C8?#@0wG>O)0Y9*V1cs&$wk zf9bOLZC2i+)So3)fO4vJm~o3VX!wSU>W^mVn8vkUn-nf*=HKD6^#YP!OUB|eZ&Q*EStmz##haAT`}p@9 z!lpv#&d7KxiRnrpogUZz(2<)cQq#y`)efGsmwFr|emVZ!<;S^StzhqHh11Jjljtt- zjkhWRc(f|_(nKnpyrqP3>uB2oqXxXb{{Iro%Ul0#LZ7RD)g(F8{ezeLI#7$8OBmlG_{C?=RVE@WqO2cp zi#$ThfTOTQz+SRNlz_{PULq}`@VQnl*&;-k)FOUA9qV?x&^6NH$!y6f7XJDkOAca-su+aw^mrxgDSt?NuVInKDz(U$%sI$HBoBmbnyTPzy?kl);l*;kmo-ryetp_^;9*NNZU2dN)H zopT}B3KYK644z=_qEF@iMWDj{qrtxe3ZG<4a(|aW(fP911BEJK5a8_MKTe?x;d^%m z_9%Tx9A^*h81$<`yDj#3czUCrqd38w%S+TQYVPW-SN3e_>)w2oc6+by-po#GIrclX z6v4A{?+RG4ZtKRY+-7VJq`sG~v~b}$5j_d0IFeWowm=<~qKi~<6$xJw z(M89S{|s6o6N-Zgc6|%=r_VSuUApK47GC%icbGPEsLRns3*Tz^S2eY-vdDlzdkrI6 z->8rmc{v8n!U#-7cMMtBE`wR{X$WL_2x43|{j2cx^sd{mW&I{w@F>>b2%RJ3Q{&3; zI26;RI}Q;^<*MdU4~)_s4iOLG)xV%W2G1#==#Jv`b?r-@aPryj zUu*NWn;R5pQV~P@qnlgOzs|c?TvEn=s(EC1_LQk6CR1wkn>@2f~`Uvw`D8E{%pz@fS^0P&RNzFTY2GX;8 z(ZEiS{icO)IlH7jS2_M|(Za|))wq6BU(XenZ0=vb<=T~+{oZ@5`D#cbFTo!(6(2Xm z$3iA+qczyWd==Vpy7SeS43F?>9ClTDnJbo*(g`MaF8dtb0aS0w-v}9w;?2kJ-nD#6{-!&h){(fA-m%CyM$*yw zRDDB#C53kZeyr0nj*s&Pkc+W!@?$UK9wL4j`8te8wRj##;i}fd;$~2^8Z9Sr7o!6& zQ?;~9ZwkJ&S8s~Fv@aP>KVP~ndC+auSH3-^TwPk;4X3pnTpi1M*LwXo_Vr3%%;iZb z=?q(ha#4xBN^{s_E-kTFjz*OumrEh=xfH&sa_Ob`IeD|>yDQsZMTBoPRl@<5*KwM| z*0@BO7uE1=Ur|GXGv7h)fGyJA!0m(N4!5O!lngeuLpR&b)GhFAnw<_KmVjbMEOOBT5y=qx6 zJSGQ3*g?OpKTP`Gy1j}k;^e8mmtu~9t{I&1yHm=FaK}3CRt{m6B$nLm-8=5KGVb0J z@$>KTq_U?Q+QC+p1Y5_&xWpTH>y$*ZfyTD}iSuoWmH!q8{s~8KQbo|L<$)VxMV}mn z4)c|LcWpH1@zmL?U!N6sP-uqDYIr93XU#tYEG3r|FD>&m{-yjAHY?e8ViNv3^S{Ai zDg30$Npz@;&A*f4PepHJjqkJin?xVX2e&5Ly%sLuDgrSM%N@W*$P_343_>RoI(cHB^h~K=KJoq-$KIh}j`wt-B zgxVcI`L6@Yf0g+sfbtieftgp$gHN858_fV#VkaG!Ez&8&a1O$&8|Kpw_w=&RbYQ#kzFkFWa`kanJT7DO9k~*YwkLz$+*~}vD9A{)w2yA zyf1A2xWaEK@#N^L&0F3-fS6-_!LEw;_VnjAQ8=ICjTJdr$mC?bSfuxe5yC)FV5r=#cSxMT!*L& z_-xRO8@@X5y%@T=%_gLj;fpg#MeC1d=?!@koX_92Q<3~*8|mwtl;kl2BwkMbp)BjK z^1l3Z^Eg<`)6I(@Wd_E1Y&y)NM-qSUtUBx|xLeMfKRh;K(FLQfthgp8-Z7eRkV^h$}kJB23{85!-^ zEp(87=zZnSlM@~8$~Z&-e~MG#KRK-0BjPee+}cOb@euK{ zZ5~a{Pl)(qB7UEUzaZi-iTK%Uh*+oSH`U>PKj9AYm;8*D?)VR&u>G2Bbo?5k`d0|i zI0opz>)@CQWO|)mT8GP3j+t0qO``kxe}$xGe}+lgq(7NalAxmv0c3=PX6$ecBaTN4 z_Q(ZcDQT_&fB%YbywBnA%+FpT!sX!HbZFv3o`EoKNBxMi_cN{}u{l{vMmFLfaWBijN-t#a~suac7 z@3R#Dmnz3KuISe|KFU4kT&fgCT`Lp3{eU7at0(-|6y9@!7rF2kiSI%S^w@lt&O}-s zr+lAr1WJ;$ST+QyWV+)QdU;eid4%GQ z>E*|IWXWJNLE9hZs{T@5w+4gNo9!J6OH9YBauDf>}#8Gvgso-@*I8*syKRdyjd+nOH?UC9gG9jIeC1BtS}-v z-tX$1(p0^l63(d)@sg@<#iPuPv5p@Qal%DBO6*Rq5$o7iL;Bl@RJG045y<;(%Fl7| zl_`SDq}+2F4}Fs`_I2|XJ>&Lj{Lv);I`jV*U@7_BxcQgUuhiOs%wzmZ@sZ=^zlrft z%D>Bq1N+=h%AfXU%5-_3N&cfo#~8gb$v^Og<>ZTlrmtxASCXGkX=8Ss_j3$G+x z(5qB^IurP=B0jUy^cBnL2hJz5c!r?YsQPs#;49)Y_ZdFbbGdNhGb^UaXC5~G*6O`v zy@=0DOu=XVjP~P$Fn1ph!T0kZi*t1{8KhKghq>39`vE-VueCyc^EUE;#;Uyxh?%GJ z6vSUXfJOdWf%5N_FZKiv`5U?SpT>Vmk5>F=po68Cso5=zpUZ>Ym!sllvxolwUbBb( zK4A9HzyCM(DF4}Dc7QW~%(E2#8OG<|<8Mj3@ao4=dq1-$99&0D&)X}^fs^ywL!dE9d3bIv{ItqEtuXD;WE_IK%o_8^uisb4p)F_++v z5r4T&_A;i+I%bfs2fLiZUs0zkm${m8BO`otzY6V3d@=fU+YC=a$S^yZkj=^2g*$4d z;xC6Ra`?VT-zV;g%DQpnZKtlO}>E) z<)CB5l$060it8C~ZdecB2RQc%u=QlE*rR2#GP!8A7L!ajDMawXhE|4d(` z%yl{w!MU7tnQsmWzY6vdI=K@3bq!Rv*xc2g2i=Nj>AE-xzzRbdBhBG{M-mj%4R7OE zG^sI;s6}?rPeY4rQ=COSE`(TKp#5Mq54zkyThG*o950q6z{$z2P|X*0;c+1kY0h2V znkD?qMuGuX6M2o4FJS=IN?fx&rH0Di8R`08PHxn3+fKYe@1#Cp>sZl;t*w^?5FSPB1mfF7@dygb>!(gAcLoC|Cq9Z_d1o=En49CH~~(- z8xQh5M!wMlbt^tfm;Q1npL&$;84l7OPaX~wW-FfGcQQI{q2d! zM>Bl$YZm;$Pq@hGdu@G7Bm-x4SLBz%qgl+A^QH1ny!aZ zNx)Z*e;TuJs!wMEzf;6N)mXZ!*Me{nzDWGjpoLTYIur0k_Srp&$59KH^`Y|oP6VI$ zr$OV3tiJQ%ES|o@lGE+8a8~an!#V!R_%W;hN#XivAAWP^8r1zEvM&Vko4bGqv{Y@S z**`vF7#ab`Jt*zc5|`HI-GT*xp#M}&Wo$&+*IF5!fh&Ef=g zh+a5Q@3@75eYxXc@~m1e4^cj?q#oUQrT0Od_qM3M@A561Ii|RfQ={TArR0If!>^@8 zJY(VvI+yAb|zpDw@lxCm{G@X>862Io{%ERe(T$^#8gm*Qf^8QhjdXBY0MnTlVl z7h{0wa!+^!CY30TG@W z50jTny$!Ctw6pSel>AxM7NDGpU(@+CGJ6f*VVJRKdyxIyCr#nz^Do7(CHX+gJvrCk zr>SDM@s|m_n&uq2%YMA3Jik^=&dc*_kn>fW#(DG{=HYi`9pbH3&Mb%13Y7QTwps^qR@ty$ih_Cg??&rwT{m-2MKE&cR z>;`r6>CRs%&~r_(Ilrb7I*^RN=DW{g`?*U0J(c1xDIY-&{qIc@tW`AtEB^zCBEQ-U`5*`rQ-@1X&?f1%ijLiQV zbJj3P$>4GSS58nWU%}f6n!n3S`yn2k3jE_EoEJovlK1!s;};~;CcajqIfZ~KC#OEL zAQ$G#`7rf$B*Dat4E@9VlpvW09*jTOFYv#4R7g1@=Z|QM7cqX@Ysw0 z^*vLM)&63-|5*=SonZ2k>+BmHlFO-)ImpSSX)uTWEYpxWrAp|U*&hKDg&)D~Vj4zjBk_)U%EY*+p?Y#@F-v1;ctK$Ev zz-2|9>TZ_>UT*Vwh+hoW_(oEUclA<;U#agrqX&bJj>n4zOvjH%yG-yTxli;k(0}XDQ4tald=aRmp4bR`;Nk>=N(z5rzDWYMOHX zia+y2{9{ATuK9;LB_}8}bo?HO$_I7Hi)fgKNcDN(mxo>GH4o74&!gYrhXYw|mxhQ@ zI~{z?+NtQvai2pPZpgSL$cM2IHP?Xc8Yv@S5xz&Relz!F(Uqk2K3hlgQjEDCUJg3f zCGQ8Sh~qTV=Y3IXnA4=`(<#-RW;G^i7}Pce1br3N&Rm3(rbFJo$Lz;CC~qA#Jli{Z zc~mdJie8&%{{xwW~-EX)$Qjdjlw>#=12Hf0gGTXYHK%&M#uFVKVe zB~ii|Wep7Lp>gLreS2}d;`kLQL->b+hJG@b&iZSf84eu&fBFh+J`3g7VDn)j#WXgG zRxUK51#JCrl7F2Ap8%FxhYjnjuOnuub=WrJ_B8rS#jiJJZmf)df)9?&rwLaozT|;2 z|K!1>{0~-ok1C&!N&dselrAU}-|D5J+&XQg-A`lnJ87M9K6o4XkJ~*u0bjXw+QSx3 z_3cbpS1nqn&04yu_kwVdbycmA?fZq7K&bwmDS_`vJW{{(;l_NZd^sZNYMnORucP*G zrUX8%(`HTo$J!;2&!VYbv`*V@>(bUfCBtd0wawOjt(_)?d;XPv{qz}w> zH2vK523G-NtgrqQW?%0A2dHqbo8i}8XBzwu9OeEv4~2Wg;0J*$kxqCax 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 diff --git a/versions.txt b/versions.txt index 683a5597..566b0950 100644 --- a/versions.txt +++ b/versions.txt @@ -29,10 +29,10 @@ freetype2 android: 2.6.3 chipmunk - mac: 6.2.2 - win32: 6.2.1 - ios: 6.2.2 - android: 6.2.2 + mac: 7.0.1 + win32: 7.0.1 + ios: 7.0.1 + android: 7.0.1 libz mac: 1.2.8 diff --git a/win32/include/chipmunk/chipmunk.h b/win32/include/chipmunk/chipmunk.h index 6337fb1a..59197476 100644 --- a/win32/include/chipmunk/chipmunk.h +++ b/win32/include/chipmunk/chipmunk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,20 +19,30 @@ * SOFTWARE. */ -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif +#ifndef CHIPMUNK_H +#define CHIPMUNK_H #include #include +#ifdef WIN32 + // For alloca(). + #include + #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) + #define CP_EXPORT __declspec(dllexport) + #else + #define CP_EXPORT + #endif +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +53,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +94,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +191,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +214,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/win32/include/chipmunk/chipmunk_ffi.h b/win32/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/win32/include/chipmunk/chipmunk_ffi.h +++ b/win32/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/win32/include/chipmunk/chipmunk_private.h b/win32/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/win32/include/chipmunk/chipmunk_private.h +++ b/win32/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/win32/include/chipmunk/chipmunk_types.h b/win32/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/win32/include/chipmunk/chipmunk_types.h +++ b/win32/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/win32/include/chipmunk/chipmunk_unsafe.h b/win32/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/win32/include/chipmunk/chipmunk_unsafe.h +++ b/win32/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/win32/include/chipmunk/constraints/cpConstraint.h b/win32/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/win32/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/win32/include/chipmunk/constraints/cpDampedRotarySpring.h b/win32/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/win32/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpDampedSpring.h b/win32/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/win32/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpGearJoint.h b/win32/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/win32/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/win32/include/chipmunk/constraints/cpGrooveJoint.h b/win32/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/win32/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpPinJoint.h b/win32/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/win32/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/win32/include/chipmunk/constraints/cpPivotJoint.h b/win32/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/win32/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpRatchetJoint.h b/win32/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/win32/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpRotaryLimitJoint.h b/win32/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/win32/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpSimpleMotor.h b/win32/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/win32/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/win32/include/chipmunk/constraints/cpSlideJoint.h b/win32/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/win32/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/win32/include/chipmunk/constraints/util.h b/win32/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/win32/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/win32/include/chipmunk/cpArbiter.h b/win32/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/win32/include/chipmunk/cpArbiter.h +++ b/win32/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/win32/include/chipmunk/cpBB.h b/win32/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/win32/include/chipmunk/cpBB.h +++ b/win32/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/win32/include/chipmunk/cpBody.h b/win32/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/win32/include/chipmunk/cpBody.h +++ b/win32/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/x86/include/chipmunk/chipmunk/cpConstraint.h b/win32/include/chipmunk/cpConstraint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpConstraint.h rename to win32/include/chipmunk/cpConstraint.h diff --git a/android/x86/include/chipmunk/chipmunk/cpDampedRotarySpring.h b/win32/include/chipmunk/cpDampedRotarySpring.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpDampedRotarySpring.h rename to win32/include/chipmunk/cpDampedRotarySpring.h diff --git a/android/x86/include/chipmunk/chipmunk/cpDampedSpring.h b/win32/include/chipmunk/cpDampedSpring.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpDampedSpring.h rename to win32/include/chipmunk/cpDampedSpring.h diff --git a/android/x86/include/chipmunk/chipmunk/cpGearJoint.h b/win32/include/chipmunk/cpGearJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpGearJoint.h rename to win32/include/chipmunk/cpGearJoint.h diff --git a/android/x86/include/chipmunk/chipmunk/cpGrooveJoint.h b/win32/include/chipmunk/cpGrooveJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpGrooveJoint.h rename to win32/include/chipmunk/cpGrooveJoint.h diff --git a/android/x86/include/chipmunk/chipmunk/cpHastySpace.h b/win32/include/chipmunk/cpHastySpace.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpHastySpace.h rename to win32/include/chipmunk/cpHastySpace.h diff --git a/android/x86/include/chipmunk/chipmunk/cpMarch.h b/win32/include/chipmunk/cpMarch.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpMarch.h rename to win32/include/chipmunk/cpMarch.h diff --git a/android/x86/include/chipmunk/chipmunk/cpPinJoint.h b/win32/include/chipmunk/cpPinJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpPinJoint.h rename to win32/include/chipmunk/cpPinJoint.h diff --git a/android/x86/include/chipmunk/chipmunk/cpPivotJoint.h b/win32/include/chipmunk/cpPivotJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpPivotJoint.h rename to win32/include/chipmunk/cpPivotJoint.h diff --git a/win32/include/chipmunk/cpPolyShape.h b/win32/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/win32/include/chipmunk/cpPolyShape.h +++ b/win32/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpPolyline.h b/win32/include/chipmunk/cpPolyline.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpPolyline.h rename to win32/include/chipmunk/cpPolyline.h diff --git a/android/x86/include/chipmunk/chipmunk/cpRatchetJoint.h b/win32/include/chipmunk/cpRatchetJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpRatchetJoint.h rename to win32/include/chipmunk/cpRatchetJoint.h diff --git a/android/x86/include/chipmunk/chipmunk/cpRobust.h b/win32/include/chipmunk/cpRobust.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpRobust.h rename to win32/include/chipmunk/cpRobust.h diff --git a/android/x86/include/chipmunk/chipmunk/cpRotaryLimitJoint.h b/win32/include/chipmunk/cpRotaryLimitJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpRotaryLimitJoint.h rename to win32/include/chipmunk/cpRotaryLimitJoint.h diff --git a/win32/include/chipmunk/cpShape.h b/win32/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/win32/include/chipmunk/cpShape.h +++ b/win32/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/x86/include/chipmunk/chipmunk/cpSimpleMotor.h b/win32/include/chipmunk/cpSimpleMotor.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpSimpleMotor.h rename to win32/include/chipmunk/cpSimpleMotor.h diff --git a/android/x86/include/chipmunk/chipmunk/cpSlideJoint.h b/win32/include/chipmunk/cpSlideJoint.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpSlideJoint.h rename to win32/include/chipmunk/cpSlideJoint.h diff --git a/win32/include/chipmunk/cpSpace.h b/win32/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/win32/include/chipmunk/cpSpace.h +++ b/win32/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/win32/include/chipmunk/cpSpatialIndex.h b/win32/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/win32/include/chipmunk/cpSpatialIndex.h +++ b/win32/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/x86/include/chipmunk/chipmunk/cpTransform.h b/win32/include/chipmunk/cpTransform.h similarity index 100% rename from android/x86/include/chipmunk/chipmunk/cpTransform.h rename to win32/include/chipmunk/cpTransform.h diff --git a/win32/include/chipmunk/cpVect.h b/win32/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/win32/include/chipmunk/cpVect.h +++ b/win32/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/win32/libs/Debug/libchipmunk-2015.lib b/win32/libs/Debug/libchipmunk-2015.lib index 18ead6d906276cfa24fcccc00491b3d0a6a3f668..44a950de2e4bf2c6dcea20218203dfcbe15e431b 100644 GIT binary patch literal 2641300 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

  • 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%0Dy`jMSRAm~42H&PM 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
  • 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

    #>P@w*p7{DM0W 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%0Deaev2Ssf8Y^+Mw4&=^4vc>5|)#M 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

    |Gr&5VYY+NNsKf3iiZ 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⁢O`l;kJsU50Rp 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 Ir_UGu2gknL5C8xG diff --git a/win32/libs/Debug/libchipmunk.lib b/win32/libs/Debug/libchipmunk.lib index ecd5fbac46d4407f4211e789ba2aa8ff37fbc4da..ab9282ba90d59926e2170ba2ddb8a931aa5bebe6 100644 GIT binary patch literal 3179954 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%0DOmuTClDgFmL1}iw1vXVkFPoy4tT>}539?}C9fr( zY@wM%4r>`pMm%+mzWS#6V12frJ$w>3dsu%EGj)M#HV49WvmV$YTJKRuU$8+natUL> z==nR;;$P$UH(}z(uMXaG=n&J#T#2Eh#uI7^`T`Mjk3)K@nugJA6wL=_n1(V!)??}* zR3GvNe4e0^x~8yv2yPkGp$}i}Zwz4ySPTPX_qc_+)G#)i^l7H?H0H-J4kA#I5h&+U zM@;Ro;T}t8K3Y1X6qajdY{886+oVqej9c5)mSC$F=yND$)yt0JhO!fBYwL-zd3m$@ z%xG)8mvv7RcUh_wCsC>t7nG{3N?B=>O4YQ|nW>Ic?Xoh>^B9Xa+;~lBc56%|JEI+0 zgpD|;nq?$ZH(56*ia|Hn)!I!B67Qv%{TgHOh3(CWWHvtqmn9cX9QZhMdRDuZ^sILf z>4D;n^;H%d@vH0t#6pgR6pk zd|`4CMM!m{TxWVt(AtjbG7Er-q{)T4>L!QYWE-63#;{Ih;b!Wl5MRqu6FG_0G}fQE zquE?YQ@!(MvI#t_Hlg&_3%yPht`?h+i`6D@GuZ^s77LI|jtIjmBf@-XRA+(tTDBA} zn|r_C)6i7!_l8kVt4sd;UM&32Or)a8<>7c|JSDnmMoovwhx*ze8tmLXv?L3Tg=SJ< zgbaJ?Bk0=I(MpQi)Mubkd!NzNTcs$5RyVzRuzH{{h;C3eAKnkM`pCj>br%(Y)tMzE z>*Qtgq5c+P-5zUMGz*h$u~sU%RCfnaAJ2`opdOz{`xs>Z0;@G)Z*@Zi`#N&%&Omj|c4mx-k~A)&GY!aXY>+$Eq)ouH?# zx~b9ISXb-8+%_g@#QuypJ;=F!_5h#CEIUiEG*<8Pc^d*@%%;(9oytTnQXk0AU?@N< zxVf@o6N0j4S05apaQYI}VJ0nJE9wL*T?Wrq5tcJ#H$@kOD>6j~p78D%`=sSi{)R@ZxJDZvO_+tXyg$r7H#yejOH zU5Z&u4`U>h?!-#BK2$c;>+Y^!xXPVV;*lmqjfrJl1{?mcJbmaS&tdqVno;3n?C9dF*J=Rl@yZqe3-4^aWC?)H zT-Zmbs>T+@eqQ07}XR^T2~XQ3tyVAxi=z_NOWNhbqG^p@fYQ&`<_GN?40e1-`!Rl$*~l2uRyGnFBKpr&av8*6EP zJk~l3JN>W)!ZN*uUU4K63PlTOf{hY&=mnXxtO-wAHN&K; z6j?@n)(xvV>baI>maIN3cUpYt5fQgSP@-UwDje%tm}<}B$<2jTkruY6Hk(8$-qzNI z?LSsOnY1bqk-DmrUMe!;qx)pU2R=FCLpdX7eBk*r@gWH#KCxxp`hG>sL^fg9Lb$1Z zGnFEb7a!#@BqN((8qgo~hrGVrbK$KbgC%K@Y=ms|G&D3|^G_pfhcW8Y+MW!wg*kGU zLP*H~s;ecZsb0t-8Me0glg0IcQzk2D;AWqlNG|TR_sFWri&+(4gSWam=;@3uqvhJ4ncDYxYD3kv{@PHO0w* zdT(t*1e-TJY%}8)fYf^$!oh~dptr_gm1RmgW3buijbJt&+lmcpKOd~Y6O4H4>-;rM zD!(lWS6>s1V4ufky5vTIFzR$uF%dK2ydP#rV^=**gΠ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

    |}ooeg0yc&xU zmI!AtJE!rO^3J>&%550&(i9j4x(!oZ#I#|mXp;@gtZaa7R(3ifI|h-(ugl1ufyfR- zWDERCz82XDJhFqMBAaiIY(Z3HIg2T>oW&ejlaCS3ZiFooOQR`{jcT++ZLlqBgAlce zh#G!fMr{hBHVjc4>Q{znQ9C;_!p{RY(vOXK{fVQL3pTcA7c04G3 zPGponGL!|@bJjEkA~%ZOlO1z^}`;F$-;DGTO!@tzncE z%H_DFf!FZ(OyR7knZhJnze4qAYyd>R4WMt;MYy2RDy)J!TeK?6sCAZY)H)N9pihe6 z*JUIwKqSsVB+m9LQ?y{z6w0-Qa$TWZ&x3KUJs1X99lm-trNw`9P3LxypQ6iK+&

    r@c8gA2@?2`SE$jO%$oto1db7UB-%UUX90 z=h1`v>Oc0`O;>ym-qhR<2r$ZzfGg#+;W(f6fSA=)|>1X^d|^a0=<%mLs!6#(?I zKbQ{`04N#PivVDT1>hiL=@$q9bXQKFK>+TT0TdH}91y|-xK0It1}-p1NioipjO%3p zP+|dyAxpnV22hd!pqv2Yfe-+2oeBUQTwp$!6yr?ExLyGOvn&9^k)@yBe>eHNi|%-u zvj*&(RlEfMs;CQ4qWHP%{KDCUVFYM_0oSQuI0Rf^9!0uwres{73k-8C4D=NN{bYfG z?lG8i2JAYqWC{Ms80HZM1GK<^>r^o0gA2@KNjJ`vjOz=4p~}KA4q5uCGKMNY4Aq38 z0JOk>>r^mI1Q(bmkZznQ8P^vB!=eGkLJP(u8;7rN5z6?;73@~aeDASOupCzEsodt7=u99VZOtk!{Ba;e)Po*4 zaGeT{b>ISXBk9MPl5zbP;P~0Xu^w53<2MY$&&e?SN*FeP78r1y3Wkl~0`uXd8)r(! z^eXz7&< zM<2qm4fMc)>r`+Y2`(@nLHco~WL)nL9Q`aDMXX@XG+HP1A$?Ph2d;u5r%;b!;oYch7yKz zKno1GP6fkd-~#idq#I{S#`Roa$gwb7jx1Im4_Wn*lMF|ca9ja;;J|e%IIad4n6D!J zI8!pN4+D<83?pVixdyoeC7Zb;&jrJbxsp;3axkH~7OX&p>r_zv0bF3dkFp zaB!w%Tpt5iMusukf^|D`^@j)Urg4V7j&B+Sg{EufXzL0iAx5CF1m%yQ2NYbV0_9F{ zf%#7a0cT3a^#VW{mto{vQ2vZueUET8JJ;7DZAMi=>IkFia*4PkX=Wx{R_FU?>}9CL;nTmeFT9t1uQ9&;vw{l0XwGy|DzQd5ACqS8H7T4HCjNGm2|UO)ki z!F4LeybLZdzl0MRL&>;48^%;*7_%&6UO_JFtZuP7s|pu%bCxS9^%8Rk*{fg&GF+#E z>bc1e}t3FmH!?Buhd;@ymz;!A(egYSmer`+Au{{Uo08WI1l5u@KaICX%gpfrz z_)2A6G7K9CLl4jb1FloSkPa>|)7$NYfs%2(85lNZ7>8Rh4nQt*hrLqS=z?M%?n+j% z6&>@=CPLN=>_CR=RFL%t7nu7IBAh81*E@i$-GVg$Sq#<=D_Yu<;pikB13?cQxK0H} z7P!D1!HIBCGOiy19NR4%gOJ5=JZRzAo(#v4gd-dDz=7*ja2yCOFb~0ra8NR?9|Igm zTR4UyOV1Z$6+OOg9-R!wv4rCw&;tjqQ^64f7nn8Dk259X`ia1CLWZ%!f|7?^eUgAe zPga>HxS*IjTuCWnb`r8-Ur-E!axWKFvBAh81*G~qrlPp*xki}}sUPqmj496*i zVr^mI2N#&9k#3wR8P_ibhD$6AGmu3X z_*(9gWEd_Z3^PFs47g4OLm9ZhTuQoeres{d1{kikFq9*U#e}_ z%nJz(&XkPne*r2p!?@c*wHUeXwVWxfmGs?2QOgZIu%&U!3E}J1P5nI#`XIF z>%I)*UJKR=glr|)fehEFAUhOXU|vm#aHeEje-y|b$uJ(a zkR66xH?l`uP|Sy2NeS6wgsc|qK!)p7kgWw5nCl1;&XkPne*?0oGK?oJWcA2(FFK#H z7oATg1NAh4Y5*rd;W`yi8^HzU!wC$|l#J^y0Ms4}Q8ThABu}Q4b-%#ntb~c-s zeMH7|p#a9r8e*r zAv+oDK!)p7kev%IFrPz+aHeEjADCHT49FCF?&l$k!Lk>812Ta|x&?t0pV(()Ld5St z4;;8o1;+*80`u=lKhBhl>k;4xTR1L67UAHF-*7SvS%l#t&;kRlQ^9a4xWIe~>BgCo zaeXi_WLp?6Ll$A+i_Yw17={pr%RvhaxK0JbRp0{im82VIO5!mAU>Is)xEfikKI{eG z&}2Ar2*)*`2M%1Pg5!E{f%!Vpk259Xx&|Ck3&#z}A{>128%>5GMi_1cEimAEKQT-O z*Q#oDC3LUCq8oabW*SR`>eX>`N#@S79qCh6WrE;P{5wqKjNV!HO}b((&D>eKr2zlX z(rfi4nNI2F=>$3>Jpjrb=}G||LA0i(N3~j46B@ZHvnD90OQ@`HIgqRccAQhd-dL?R z09IpMKNQ$k3*hVY+DvmbVI#+-2L!_PW-aCMl3_eC9vMnmDZW{Ui^9VIVgo?noC1ih zbFjFA_s_-&U|15Xb^uyqRpPmv;yj`-*KnttuNiu_1bIrl-QK@Oc_4j#t`C5Yl{9{uif-{w=Q~}U8u$O z;g0kw>b5TiMNK*`uA+;cBiCovq*2{B0pCPUEpNT%_y(Aa1` z%rrhi$C#Y3H9iLZbxHkX@Wxc7EldR_TQ{*^C|19 ziajvGc7y)`RP8{8a|)=oR;ycpYHM777O0*Pc(%C|yTCaf`n)KF2h$J~&$!Sy1bFj_ z5%BvW{{+76z=v}R_>Qesj{&}8G5Z6)J(J}()odODcsg?C1J8%LTmW=DK0?{j(#><(;O9D|B?Q@wgk!I8~uR8i{ zviS;SF=w$W+|B~Fml;Av9c1;$VZKH%cXF7x-cOh#!`14rYBdk=hQ)OwTw#n38;6AX z^yOfEY?wM*W%whzcH;iRA>nIhovt}I7({VM6p!{4SF5@?HVoD?v=VkK90P5`;YOTO zz;{TsItus>!A&jT8y7b61-{XGzQDJ$>})OH2B(kn&CV6%q2a#d-t63=qmR#sDtMqO zS~woS4FJbE1>obV)qDUShZ|o2J~3=e5WovAV*Z#ChR1iaOa29GeF6h6A<-v#a{{Bu zPGt!l1-;@JB4n~$pll1dd*4amBsTV*gW3_xWogv7=Via80QoKmsP8!09+Q=%K^A7Y?KPjzE1Q^2>VT3rZyi{kox;HwH7^8~)d`aCZhy~^w8 zkRX!K2qMX>P>>Bp3xF>Ud^o3oZ&|gv6!@0K^@YG!Ex;}3p|Ch16sogMS~?1*DN$kX@L&E?^DckMh!Tf&a! zGC5V%9i@w}s)y82-6CBUuku*D5*9bYVw_X3xCtvNSloma8Z2Hd%srf&Tbocr^D?-( z^urP6YG;VG_i}*ZtEl_O+Dx6b5wWV6^1gb4@y%DGy!bZISww3#OeS)v+ zy%6;VmLnkx>6}Q)5=3&3BhMQIgH-IpkW{LqCzN!gUhk>Jb@10V_zUM0{B=~ddL;aH zR9rtC{%Q&v8-%}(=Kg9<@Ye>fcl0K&2SYk1lFjEt$t+9CAc?S~N-~6MDJLY?f-CBq zJ^tDVe;osV;hciM*rU;6c>}+(WL$57?=}g?bsdi-g}WQtBzIA!E5&2I6TM^4bW;`xah(c6{5%06Je82) zOv$*u6$rP4jn1&qVc|R-1w81E3}gOp_5bvXCOrEH@33HQVO=8|rp!*+4p+?|Vb%N+ zX)?dvE6lUJ<)Y=*XLcmju-&b}rTs{&OspEVktff9t?(qSQ}Lwl4%^Z2)7t?Lx}Khntsg1Jj!L64A>0Vlcz z;O#j6EFpeqLD7F3#yb|yAnn?&a2##z@klxMid~-*!Vt#>es-{gf2UryIU_cK+IhMd?ax%4y*^wYDoj#$B>2j7DcQs>{hG$4RZn z#3hHAX!9iUki01CCK67ujFThb` z5LIz4r2`{TEvYm({FnqaxEpbzprK@3KN}71tgvxr*f_&#a5teqKi99p{Vt)soSC$} z{LV5&cJp}&0?tS(;5@egyTRd?Ch&IIf7;;A^>1+a=?M{=zYn7`l3S8%@*-D%>hhAA+~nU|CX32HhuYn3fP~7%bt;wpCvbuJ4xFg6DH+!Tv6~Hys_7QXYT#D;dT>2Mqf!QQi;!Mf7 zel=WrRoJ*PY+PY^^&S*(Q?K{$->wUzCaln+m9KdfMU%AT@70~eU_Ln6#~l#J_tfbVV$ z8#h>vyC1o(DGPVQ%?WO}(G{gP$SIcrH(LgX@L{_}H<1+&KozXObt+ciXD-N!hY3B- zl#J`Q!HQeM#x0f=k0KXq1!v;Lt@vYt6}QT`&0FM@%ZfkxS#djAfuF%3D{!5P6;FW+ z%uf<}oGBUC{|qbc3>$w68+TZS{0#-LjvK=EWd0;$H1Cj8Rpy<%ci^W`%(+W&7eU2u zK@e12rvmjQaDn+nf`~IEOEoOFJZ$B8+Ti1Uq+e!SFuQabXOW~%-l__ip@Gi zL1;KHFueuoqTnyyfvZ<6g_Uw~))@=)r`w`hE7w{J!*jSgha6GSYGTgJ*Hmuo$^UD|`uv zN5Mv%Q?PMtwK@hij*aWD!^YRb#;alD6=7ihMNIyiVc5T$UE*hPFiz;NFuSE46Z16& zPu@2XMAF`i`D!wvL`m|RIjJO>sH%Vgv=HaBR5>*txaJMGW*l6Da|*7RSglTgYbM6^ zf5A0xhmE&{UnX%a?}Xtq%P;h^nC9Eez$G*pab3UV>dIuK?}Xh*{|%&*ffVNykWQ;s z3xRZ6Tz?-(-wPY>3Z&EZckR~ex>x(2-G=3CP3QSirLl>pkU~w~MLtv%NcG3*xfp8y z9(rDoK+jPo(mTEU2XM>`I0okw98*%Q7Q-Ry8{-M8PKJv}h1i9A( zIw$vL=M5F~35IfdZ?z zW9I0e`g%bB%r{#ThPY-1n?{ z{2ZWv_rIt)F3!&ZLR@M!w@-9_z-3pvHWu`KqVoeTi*wc7kDi*_i<&zWHHUKwHMbTI zvZ6Cu8`pnE{rw~=ubxjx)re=yas0J&@gxrWdy}4ObC&)}#QS8=Pj>zBnWnS`)_ECK zMnaiuKB+{+(=1D*o&R4Grpa6!RYrn1p^7}4Q07wgt2K4ys$6BN1w%}0e}StT;A)&x zaP@|2bv<0Y0UxS~;6pVL{>WLA9*D5#du@aw!+{(WIn=>%BSeN{aWKRdz@Z2p*aR?~ zQvlXdt!@Ia7JR1$z|tZ{4}q=K{di-V2Po@vdiZ2kx#OPmIrd0=?#!y7pF+oMiP4?u ztI+X|#OKbe5`IgE-`e0eoKx^yXSLb^zjem-KJZ)bh|w!z93Wh`Mehg4xHivwGfz1d z>%BY~L2DoV2)%zqKfqI(K%Ohf{}r3_`(y~3{UR6>L$qfmcI=PT2U?n(*4VA4-`JYE zVerv(l%5%Jg@rkgz);ng{jDo&C-`VR9C3w0cf`l)5r0=ZbuBD%GHh4>M$fVw;FKni z`@6auhM*box|%&vt7lu`avG>OeSMs+FT6u zc1xUYq2bK_@LI<~5r|~>*0d?nh&j|wI&`1oRvQ)4bNqZWjGlUN+LiTWHfLrUSwGts z{RO)rUej}AG$P(9p!?r=ryw^{6LchejtX>G#BF1+r_jy#znC!$T~1!ah(!!dbU9u0 zdIq{8ZpbaPD9($pagz^eX3Uk+B5Z-agdOo6L%Xj6;;6IuJD5zR+tTPBah(coy8jDi z_9_R?l*EUOfO|y57;b^4d&PXVaY(`xLVh${AI|ziY6bGTmg+#nX4=QmXpMbw8U(d1VoYjVvi4)M$@Mv<@CJ1h7)Q)<4xg8TY%@-c)^5?^P6uZ@T? z+VVBs=hgEgc%g&G2tA&rk7gc{tQ9$uCH$#->n1O|H9RhY4`n$`#>}VI#VW&K@+9tk z$)lUbdO^e-Mdn+?34ERPkFQAQZDk$<6&=xoq6nhJ3^P37v zyafY9L8-SOEDFl(f@*byS%G0@=dH9+j$`30STqtoz&QmUjKRAo@WB{7Zw?<+MT~h7 zV{XK#j2Lqw#%$q(v3j-32eWM$qQLUOTyKHpgE`&;%Lntk1(pvgy#;fSq?-DqVNb0K%CE*vukBl9mip*yafZ%{aM?J@k`6 zo>=AxPfsjNFig^u46WoIA1IDQA9W6^1ciD7xXAJudIO~Bo(N8bixC0S5dk=-5CP7H z`Z7eo(ulD{1VJg+vLc~ome~EL*fv72wdLFXir#{z=J$qFo?fhdV^$5ly% zJK93silUBI#A7m?P8_&IIh?|tM3Wty$xU{+WSj}Y9Z{CaPL2?s#N-4~PDWBuUXxvs zwt~hTDbkiB(kc*XIHwS4cy)R%`kHz8(lsJ&Rm4~+BCU$gO%C(UP4t!CNL%IUg+hYF zafHrEWOD?K6lwCNA=lw}NC1x zbunJEfG^iXj9TH#IQM0Jf-h^mzFd>wOHLyBl9R~3l&sP@x#K83nMBER-AZ)%sovwK zweV97{DgA~ep*qjE{C61#PxOXQ)9$v5Pn*zZ-{VLHAS#VZ9Oz~Cx#xg(Y1z^9|~@Y zSdWmg6)+-tm40|cZ)C2N%;Xu4YxuzD45@Eohae;mgRAw8mKe$ZT#V!YeTq3uZ;t2< zo{BXOXJa6rxNWk^9kk{~sl3H1ceJ|rTdi^jrp!;Dx@dE6$+*^qW;5wBH_?$VmzGek zFE1Ts64pWT_YK5+VU51IJMk?{d~0{&C6Yw(b$l7o5%E3BFk;Dxccek4pjB4TV8R=0DjkM>&apt5k9M^HuY%La?uhkv`p@3QY`k9|kMzOAqi z=M?O7-qSi3_8lXPJ6i7&ecN#nyjf_4qecb;nVt{+Q-E_)9qrx?rwvE-J#@O z_7m#z@<|>q?<6mu%6A=bor;&w0vDLi#EHC2$+&(BynM3dV){-H_sMAqJ~^40@654u zp5Yi25;>0DBEy;cg@P+sU~*Q6P|9@VaR+fyXS__5DRL5!Ib)<-ts_g;;7}77R~4M* zse)6f3dCDfxK5=C==CEo(|#~j0VU)5nW%y@BF5=fEnI5X!nqNBnY}Q-2R#U{oO8U{ z=IQdtW}YFZT&A33nZn0FF7E6I_8+X}|8DB1T;f~;&UOoMm7Qyqi6!w_ zC-QZk;WWX(igc0J4N~Kly=prN+}uFuSAtz5iu^eYL#9T(yta{ z;WZKOizk=6roC6lDc6+an#5s|UOnQi=h}pLx!iA9yxMPAuYS5kO1eDK?}Kz+ zowp=ZCpW~wZQe|X`F3p*Bb~|%ah-|AC+4t)o_P}qXI1W%E$MZrT;e6Q3GNRiC``!U z`-raixy2Jdf1vnz2+l(M;Cesf=T_pP;Tk74mWw2A>}27_PL}w9Dt|AyENf@ky_z+L zd_>E~muIyp6N?a5886;U|<7K_3vxCpG??j!zOwPR>!X9}ld|f^hLJ zEUr^=F%4p1X2ToK?44MBJ`h%A8S}D?xfV{k%W2L{hLbw?4+-Zp!kfr`A%eJYsgJ}054 zBtFLq^h>jhC0Ry|g`VECG;5Nfr^)%pgno~3{T@QU)JDHVLeGUbj;A*_3zw7Qm!}4u zUS9-c>R<^vC9(Sr=&Q1fm089L3;KO1FjpjlPOFzh=&Nk#D<$Y$hy(q8NG?2-pdXqV z^oPL+$kZVbbV|ncT0lR{0!?o-nujF=oej{59S0|O;5`Z%g=+}jn$+OY%ZPyW1i`|Y zl5xEO@anUSwOK};1@b8rn03iO4)yhHz3thxl4rS)|Hs~Y$5&CM|Kl_FULcZylu!h6 zTdpGk20~MaB?+Muid;Z?2+0iu(nz6LLlHp*u~!ttvb(yLkGkvVs@T`EwzYR%%c^Tb zQP;-r{hTv%=FHr=k<0G)_t)n2%9L}S_tVaE%A7fKuB|$K?O2c?)f4Hd{yczC`8iS< zXS$7RE1~*|o_cjpeR)rPSx>#nGT;Sd8&#J^gO)o4&&qXy-* zh_SqUI7qBy-Y^oOt*2Z8OAmB)Ej&1t9t4UJ@xvY zdRI(;)*&_brSq-Xj&0K(+A$z+`A7QZ+H)7SRY*Ywm^Tjsut3}baFbHgzAOEULO z)7&@7+_jRzYorq8Y;5J<1Mh;9N%@lxTKOHlurVNgIYj#dYJcrDUVpro{#Y;l(O!J; zFiCr|mpK%8Y=4IFXfJC+WiuU}FQq@`PDf`)>5q$ay#F(v?6vu^uOh{CD0l*bX`4Wt z53)ZfqhE603mb7_jj4HyeZBf(U$4G;MPGesUvtbuO`o=`FQ1rS-q-zvQrY(-X}`D% z`Ofi#vb?YRoe%pMT&wPjO?#ykZ}MhzT;_`3khwIa%oTkdUnm&M`bx1}>iAgPmB*fh z#fsO5;R3EpO<&K=lUDY1?Wt!}_oZhB`UHc2h~eTdzYSaI($e8khYxEkO7l~Ps=g>V zbF7Q&bV~mdn1t_w>QUZxef3&a*xbZbNw(DWB|G@no3$yOy~?FrLtn&XLwZ_$%C%~S zR!x2NMoFvHZpRx_SM%&dYzIKoNHxGj5YF| zL$6a@dYw#qot&Ot|KfU`4!ut6tDnmB!nVYGT=@;Pc&EwojZ@{jQnr`y86@_M^u&J7 z#cqJuR>>Ee`eH{~>op1A7s??|4*E?l>o<}b8xLBI#nghm2sLn`PL_HKy2S{fA4UNE z^y+?Q^Ys!^jp}~*F#-0(MnjcNQ9QBz7%^5L^~Xp^%B69@MNuhX5KCbDm~1Y&Fj`R4 z4}z#yhPJpq$QsAArQa0?n0}6&w58j))+uMao|R*&Iu=PrR?g;=7QavoEBfTmQDfZ#nF zyyHfUGM%r1b4LxzVPCAwA?Zh&(lZ>pFLE4BPL=w(Le^(nttSy*Cr9H*k`fuE=kO~# zm)^@$I+Hh->Qkx&8y)m4_z}$Z-#BSXGeC(&PYk zC_BJu2skpsRH(p-T35P_Yx!thhvevkt>&}} zsoLNi^H~Bvl0!eu!hU2XoRq8$anXhPnKV@R9BR@~7s3-V8M9DdGee@}Qj;m|u4O27 zEw#`P#^XAjt|i;YjPH&U8Be!yZ9s6mo)3e4`*i-GQ9&O+G1V9Tz)q}GTauOP<+Js&ZS4!UdNV5S>|!ErExuf>%rCg(OXh;7#IV;!v0 z%En~*L8-fS)R~dN)D6$k&OE~w-XFsEL^*OcW9?viOfad}?nma1GR-~K+uVXAbB7#^ zxucWJ9h%bI(N2>bS{FF;3|shbn0supxj~rA3*)$;d+akp*3K9u-#PR-&eF$x@*5sR z4GDoUA`#c=RI?~hh{Q37#Nwb{6x0iY`Uye(cq=wZp=(mW5^vvF|cV$jlfw6W8gOc@#HuBFvl+)W-+)ah8GokzxW!2No(63K7PgHg(P=J`p6r#Wogy=Ut_z6tR9PQ8 zKrD6(iRQGR)&!39%Wzg-oRknSPGuow0T&VQbPGt2IObP)oRgj41}-Mx85Yo%m|==c zjVvQ1ymUG#!g^VF$v8vY!Q>@GaiD<=)Q9Wp|0VR}gAZ$3aIqB zPN&kZ;Wn8>^56YBn>1So zI5fj`I-0!z6u{4uMmWQet6o}kOGBcaS46t~ZSlml2?&U0A1&e}DXpHbldS&+} zfbh;6I8oWrEw+S2*?kk#_gQ847E+CGf}4w$8e!`srRLkI=F66Q zqXqjZ&fW$?=!)xf;_RP50sJxPh%?>BH6=7&KM>S^wRHUism8C+ENL#uIDk}oHDu?~ z!lx(6m*+*LR0>Qp)ztgEXn`7n$WOr>dgD4By}t$u;IBwuoar{M1)#S-r29hVG}u0* z8orQKIpkMbex#D#c5VzBULcoXnrS*FX;tou0Hcw}?XNKW=e*~jP(BPphN6QQu z9g%S%vxKUxX$dIy)7*AY%aSRm2Xaw_<3=W9J*rcPru8Fj=)eiN4%WcpDZGVacuQoI z{VGf6P#*C!O(5cCTefLTXw>0Mq?SbGVtLf84zvYF`@F+L#5}KaXqG>2(v0d7qPLr= z+{SgYRpvf2O}11X2%cTQGs&03$&K`)fH`xJl+Qis%-0JJ3n3m3ODi7ipP#M6E84DR zFbqR<@Yd`H3WToA!{kLNs(D=SEN&nQe0VBg816S`bUlG13c8c>-P2Ou{$1Gzuo5ZT zRDP6^4Sj#iC4H&6{y8`QhT@-cMZ>3r?1}N7s7Ul%uQ;bsiH@VqtLgV%wFe=$mnrvn zqgR`91Crb$Aom2w#W@YR_I4HzLv9~aZi&&SO}YN4L_iJwFXWJ2VcQ|RVJU7d=m)jN zLM@!rP|IFl^(fTJG1Z#HAH%~T_Y8TC(00aA8%hr3=3m?G*Ia4A{R0__bcYrFq@FZ| zZrBWHZf$oY|08>?ljE^I95ScQ&H337%$p4Ja8AR#Y1qR6r9BPH$6#JGq(@8(r{l#X zI#VMW!YMN9s1U!>9`4E4X{+5(cOuMMiuv5q=x8mJcN7{Ot*$#&ucFp68hi8)VW4nl zm_{9UhKZ#*8wbb5bV||kWI}C#d{;U}Ta(4B>=9UDQaXjTR2o_p{O~LIxjB}9L&=#jZUhp$IcJ$9C^ZRN2zpkGXv0U{(AJF9k**?%p-4_d zk>H$0k<7++2`G};aqTG-$)J!v&@7TUW|0iyMKUyGuq$Vg40IGpekgC~p%lrSLo1Se zRwO6!A{mlYBwROlkuW11MUnxpyNbkyQe%7YMKZ)yB!f{Tb5SHXr%@yev0Vg;WMN!; z21PPFqz^NTWRY1U!+DV$8#36Hvq*+HiliWvckH1Q$)ZCmk^)vFW!ljpgX`gTKT}w^ zAN}z!G`Lyfd>>;&lUpTT+N0g2&67uk-0z=kR=-)fB#qN6^-)%-^EW$Om1B}rIT{7? zi}6>)ZEayU8~;$xh`9C@Q%d2DWNBx0}}F^F>-F_^#}(}=-DT)PJ`c$^u4RoE6n zE5v@ZydnEG!x?(VNuf6kG$`3>tte#hbV5np6dO4V!#5wGTA>xoR8;C)W4tdC>lRj; zf@$1`*I86&$Ayfd5IAs;mrx_VCu+Wm920WCQ7I0kdM`XCI|_Cy`LVQejaSe?6&`KVxGC~thoOj1XZ+wvxcj7e0-9lp*- zLUh!G5Q?QwE&C244yD3ip!Nvxy)KqZlAuE_% z5hUBvtD#eq6l^qIOY`*GV%*#0o@}|JHp6U&8D_8ves`AfjF4v;H~kiSGR|Zlx7be( zL4uQg+?%}>7%8=#!(`+ev7Qe&&k!S_xYdj~T6+3L8qRBjK;LwRK(Gs$cZ z%R|OeR+OwjqobBkBiMQ-xwAr!0kb|Z+N9d-)E12t+r34rJSYZKUy~Wo&MZ=4QGAKwIEt6Y7~c2ytFMy@_vLV24*8V8xxXG_S~%Bs)Vy!xEQ zst@fapq&#k&g9jHQ6yI%+ABaiH)Nb6BHxZ|>xDeq=Y5+@Lro@+ev5{-4S-XOjUjsD zdM+IU*2(702Y2*~ob8NljFKG#l6ZP;!&$fUS?k?sF9O8)=1|^QJjQ9C0Amv|U=NBL zD8%STun|hQPA8OZ2MXZZaH3G6+qiZyLTS4dN^Hx3?Qjnth|Pt5m(s9peH4ok;P2iNJSJa7ehfIi=c0=Q1c1N6Z?z)z51oaq+( zQL0C3}Fr%P+W^JaBb-3OolO1V2lHai-h2b`})4#*+R# zl6Yf&ZPLX0H9{$Sgf7jb|K_~9jZc1xb@Xr7TD_Lp&hI9d)3^Mv7}x2zoW9xvn7#)j zi`l33+S#!9x{$udGMYZLH}(kY2>Z?d%b2U3ljgzHI*N212fNZ6Qxf!M|j^1=roD!7Hba7%hB z{1ZUnKPJ&Q(`{V494g!%(r*jtw^~}T@1l)cg)^j)&8WNaNDSgV(l2X`%}sZr<*uqpl~JZY&u`Um3G^%0?*9ltmx-Cd=~Xku1wwCnk$N;bkvw z4Bpv&f%}3x$gy{%=h&|SgzjJAM9!gGY+MJ&{w1W}8`AHw9J>!0a5#T))UO+E_J%Oz z*csIx;Ai6==5#&`A$NQOgmEttH${yHaN=LZQk8Ukumj3(iSjR;a&McI`$1W7Kbd)d zdS?C`KuG!lCo+?65fd`w3LW zqaZoJX1mFtt3fjM;#~gS_QhQt`BaFH(6S9{Z=;6*JvRzJof|bJ;Tnr2*s$Ocs--_e z0!+kpI<-_$nTZF;G%%stxb`AUd_1H-W|^oWReLgIJSI#m^)S%~Dv5+Qk4XtMuhU1K z=Wg{A_oqU}lfU5|J3q-gk4xU+N^}TS$M}@^dCqwdX>{)56bQp_BzG<2m6hn%_wdB|AUKS$~t9#U)9h z^ema!2@+r;uG2BGD^LJ;!HG(;rqE{$&2bDx(hLVl3 zyIyA~WfS+8L&i(L;T=0a$vZDd-r)kBq159LRqIK(mqjSONPg~xH24|U>G-)XPyqMA ziTq5raqTVm`PGpAisk2iNY&m58LtRGdxcUCsEjv+v#9&MhFYad(JFQDE3KDOt7PXV zIqOx)SzHo#7PaI-@Gf|rTHV*vvo8uD@DZHIKDv!-@4~*fLi(GQeYr^0-VGUV3j4g` zCU0cn1)q>VKS|G@#{vjH7T`qwq}#Z*9Lx7U59$93>7Q9H zJq{VhXTqOj*^mHh1`n`_U_R_Q-bus#$L2GvuDQ@j;mL)zPmv_?$aG1ftyLr%Ub-%t z5+@CxUGSc58|x(HkKx{=w5N(BIRk#c76Sva+3NxEs=jrClWYXYzRjQsVLUXjWdW@d zofM-$aS7&w95d^aoitPfv6lT`D1~iUdu?z0ASuM(otQKvkTi6UrfF{%2}2PIzMr?n zm!|44O6N4G_|i5o65kjw^1@_TCoMs3rLA2g>OpN&({?QqwauGK>nSW6cJQ9zq_%l` zQqOc!&jQE&C@p*yV6F0}?NB7?b3tLw-cf<_**n_SM55u3x6ljE*W&4xwkR=a@XU?X z*I&}mfVLk&)x~u>Lj&6F0^kKWQPrhetk%a$>~BK)zL5TPNdL;Jy|m+n_8p%gX2uy` zhhQGF&P*rAU=zB1A{{Jg7YyzDkoJ({^M>zec7K0{cJei=wCc^*tjs*OZN4?k8|~OqQr>nI1j2c~u*Q?j zR|kQx(JqXFlzc;t6<=u(9pw*`V`|X2U=_s-oOf8*OfpM4Gi+qBlD1=*cW!)fR!3IS zYr#tE6qX`+lvL6TpIp+XkbFsBYP0!nHAW{<{&r$$RG%=LtUJxqZX1&PBIzTmKMUdQmPc1T}O>45@YIL{xZWzwx1Nrvqs zZogDLq|g_!zR8Kw+?pYA;IRW z5W|jMDK%jEWs8#&HFyqAWOgzqDOGSf8=SPx=0e89lPZy|9NFkxrZ4H3oav~_hbPyX zbDS2)Rk^EM3tq#!gtf8R*2XB8c7fWCtyG-OcUEDebC?x{xk^R;4xufW!-g(l#}+;= zmhz&^uF2MJBQJN8n_wz@vyY-SX(Dc~#~k;VtMO*Q8vkhBWrWnLr9_|tY$s9KVdEF{ zb^LS32Jqe)6O*Lp5kU{Rkr>MeFoeMuQ0V?!kHQ?Xk&U{4fHrtS-`_oKeMH$!Tyg%$ zKQ~GrlS#9%7m$FSvHEElWYM)eKn_2UiLC4fmy1r@>0n9~c|y+P&yA)O7NdWJDq$(>>_o7h?+C}=ue zataL*E_KQ&O;Zl{8Y_afiauvvUI*cilme%mFyhvGf|0M_&0 zNG9mAsnpn8V?2gOnYzY!e*nnPVE`ZF(SwsbP+=dg*O^;&$N{qjQr}GwOib)QtBKgTw9}*>xies>=Ik(;LUpM9!Dw`o;XLse$ zjH^F1?EbdvDB0hfC_gDYZOuJAZD%H%79naaE6-ODsRPHq8@4d;yxYdpzp0gnwE$FUZWTS2PH zEnop_0Usoh$IBw+7LehSTfm11bb{IP7ll2SnHGlK%S?|KO(xl%w2aiS^T~rr`Hs3( z=&W1DD7nfzD2tLikcUbA6U{xe2BMsK8&T{YDI3G7YRSXi6HH%X==?j`Z(K}XV}7*K)7?n;{eV{uE?*ExhI+C&i6KVUXr;J4#wQMN#@Q>Y3^L7 zNe->&Ir9u#_-~jyKiS;Z$=n5|xr^N98k1xNd7&)~yLUx(SYbGd(A15$JiJ)=_)>mK zU+A>QVe6t~mER=6O$D!OB$cWWg_Dw`OYD<%&icbY#L>~MUt1aCD~ZuWNHH6 zCSbV}$i2BVDJC42IMiC|R4aw7cS%--T(A3!8fYx0-p6muppzIAy+?>j8Nr8ma;x$_ zXryL`6KD@hBg^E0q)|y?j0!rkv8LE4@dJ{WkR|ewB1trsF#35JE-gPKOqGnWyL4+Z z?jxs`oZz>#tYTUwlC}INNn92-CNl!N&9&tU7k)yd%fm)Fk!DDa;?GNDm!SQWXscyI zsC(mM6U&g#oQ7}$?OD^^+h`!aj6|`m%h(nBB~qiBsk)qwPLF?1LYE|sPgW$gWVV@h z5b%QZ%cGXmQM$qvrH9fwP-XjqG)^8-)p!pLS0)V&Z9{DLa{o9CvB~UWHCRZ2X~wV+y)3W7;ueB1#dXjWA*(V}*$(feD2SoNSUfF?e7TVX%iKb9^;NAZ3!3f_jVAX`)~}o--DHQPput zOaUkrfXQCjGeq_@uk2YOd!|?RT#-G;D|?~Hp6`{tRAet<*>lzHSh-g5H>uUP;ZT>vKTWRbnrEBkbjeX3XXW|6%K+41USb&_~h-H60#EwxJ% zjZ!ibdyW8Z_2PS;$lm6aeW}R4*em-Qk-gI^`v#GHomci=3`%ifRUKN0sy|UjF*{^$L zei{dW>m)ctPVtzM~1cWOj! z01LgIB0JkFyN}53?UfxA+5Nn-qar)(l|7eb`~3^L2h9Q59FR>dZ(NBgve{>L0WGRJ z8_6@8ktV$8hZj5fI{7;VI<-srS*J}qrip>c0)ljjL}g4A!smCK*rGI3}(+U z0zNVod_)`Y;{?1Q6?}9X@FD>}0aPhe94ClMvX!PJhmA>%oGg$NQ)xG$4eh20cxfv5 zls4ce3ixzTr7&)`Ad06ZnlFgvrc&gjHWXPb;0v?mDr^Q9H7J5&Nop;s1W{!wEh^g3 zVx@prr-CnU170uSwV+Dj%|=1gkeX;zD81`N<)psykAtc3x`LE=pGI(qz>j`zj&(ifpAOA+`Bt30)2$ zDFWbnf!zafc3V-Ts@JB{d3P$Eq07yJ-yc%Jf8PfDb^*UN75tVq;C~kIyI@Uqlhk9G zuDCN5+dJA|d!Jx?uiHuYWGfX8uNm2{QNZ1fc)*;E>bpN%sb%G%2D+f%!6eajyl;9) z2-*vEl8a1LAF!Z)8OnO5*97<#uiEi)wt``dtMh!xp{?no7ZF7+O49mu&@OeVeIu#e z$M^SUACh;hHZU(AG#%cASAr+W!HPz zN`ogWzxs(leoV%5d1f(?_Nw|3l~__b^YP~b{28iZ^Ky)0lL%GyQ{gF5O2nCQ_*!uI zGDQ)8krLg<_nq4h`vtpiQdqMul{I~QKe@U6D7gKQLb>l#D(6>!73iPapbGS`hI76i zRzM}YDML`T2bGtT+x19UN}T|vek0T)NayxpcBXzK(`M!v@pZJBInobHrK0LPyob`f zmJN4B&yh_@<~Up=cJ856SF#bRNa_i?bxvqsN^(Q{utYwH7vSEM$OhgbsVkD!I+J>k zR5n-^RNaZnd?YXvdB3K%%jsb~K3LT4`XR|7nVxviz#l0JCO3sIqbYnDN##p$9U!>& z@8R9>9n}VUh(PNp(1TK;Ro_q;TJI{L;XM?W^G5dIj~JRf}I zqDM=1Y!6pkSs;`jl|uPrQYjC|jT7h+iVM3nT!l2c|TTVLe4k z8LSsrB;X5rc=c4OIzNSuaPv|DUXmhW%2I**_?q1Dw@h$Lc*mKlR;FO5`d0No_g?01 zw`$B{5_O{iWNVVhmZNwRbzZoHn-gY_BdNs3A*Z_0rwH`A9!gV1c}-%TR9jSat(iJk zN@bijxH+96IGxr*X)Ld-h9(Y>>T5*?9#&|?;qVsB+UjPvS+LvW#SU}TzhNyNgi?#! z<`#FZ5O;QpV1besIZ=Il7rGNJa3=WG^9A4YsA|@U0hd&xRCRj~rM|@qBv++|+$)`2 z`}nSKCtU7K@T->zxtFvd_u{tYUgPF^wcvV{cU@zlaf2JSN5FQY!VgW3O;z26jQr#b zYSXTxI^Y#Ex47lpB;@?w3|lDxRrPmhs;XC;0q7W`tLlxY@@uP`yfye^4`mE-5>@x+ z9!jy4K>b)x8WsBe<9k{Y#U(va-jxY-U}8%60XB%HK?@L*7=i|M6H-x9mn5i4dn%RX z&FISnJ3pJJpVCvQYN^9RT)=uE`3%IU>f|=K#s$|Cdn(Jzo0eCjTa{+BXY^F+m##<> zHN6d%a|O#eo-Aj3vz*li%SD3a0#BCny;;s{gXI#za&a3}2|-oiDR`;3;PN(D)(Dm> zQj}wLQaQfH%5iy5&!-GkUFNMtRU2Bg2rZgYXwjIY#rsT)RXvsFvc%eIX+{DgvgN_f}h$3e4~K3f+{&qnTj?2tkPN0Pgz<| zk4>V1{gH)!bw8!N5f2q2c|VdFwsVe!&B{@lmX|kR#3!gaVGAlo)sIp6{eyDYEO2`r zXCGVK)h7pCL{+^63IU|5N8~7t>~WYc`a(tPo#P!jy>h%Grzbebud-CNM~*yLb@hJP zsnl0}IXUQdyuvIuM_I)lwM4HNMT$J@tokBQqp3xnYF2$AFtn!OGN z<$`Hh3h?4oRxL_p)j}_;7NoFhnNT2+B3LR@SX+_8D%H0fhzj=R$L_Z3g`Ca6lsXKhef zIn+7px{i{Z6Q^r}N-eAA^7G1>L26pdFf}ASwWz)gr0=?>RgT0{z;l?B=OzYsP;De= z-CE~#;d)A3>*Ci66U(ZTWSM_T;cIsu#ls_%0qdLkatCXJ;*C&$v7p#4IdOo%4UGxZ3PI2GWQ(?F;T9Wf@aOgJ!f33qP7Vjw;q(+Vc$MU&`H@8ioOgtv!81q- zntp<&PfD7Qpuun_1)mtB@%uH?w@1<0N4|}QlxjO*u);9n&4iD^p!Q&sRldn;s9-h7 z&1&Fpuo`KyDll0cD_9M8vl`~jO7$HbqT!iTZokl=+*)jRf+=BqC=2%b{S!i&7*_lJ z6GQkyf(^ZoOU1Y-q%^H5Z)iwVDjTS}sraNKj8)GFAg^InA;@XaN{@Xbl-)F2kHzfJ zMD%* zsUDcmjyY_ka2psUCEn`h&b2ce1HP*Hexc`IoO}a}@4ZgGJnT?58L4TiQxNjD!w13;`?bE ze7_WYKX=wQR!!7@fu~fDdE#f@f)L^R1-EZPctETwZ>edX!=HFX13{HRRrfJz(nR>z zOp=uFmA9Rpd_LcI7?$Jt1l=!x?~AG%#?S;$H{Z8m>H(&l-|q|aF`Pfl$8do#jp6+5 z4&&+VI`Z^(nLNEipD=%}=xd()(HUdF9ClCL*Dv0xs_M_^Hl6da_!JPre)9I9>Qlmw zNkIOXr-mJqfIP8t7~_`4Dm*Qgnf(O~^wx_Jpf5XYmB2*L21)gG4>LE8ksbq8A9f=m z-xfO(dqSAU7`8_^MPo-JyLMszKp>4)+lRfz*jPfG6~Y5c#W1L*9&cTw5kd$Kb3V)m zQ5s2)>GWI}a~2byt33*G@Z5{FGAZ7p9O*1aj?%(j&jIAXLCFr(y&R|phCp+3ZLc{J zLtPvR$IzH~wCR`v(=o^Lu=bA;;X9lRFRL(ziQ*N(uvFF`?PdKjUdD||VH}=>Vc>De z1|IKi;0Y8TNpsLJa-3QEQ%oaEO(Um@(l1G6#dt3(CU{vf>9?xdL{BqS-{i1ktZ0@E znLaJq^lI4HJe@+`UKbE34`VdQf>I2z7b9t@Jh7<;;*?}R2HK54U^y{$aI8ei(mJ=C zWkffXe=sE^C6MS8bP@@&A1ft6RYdFNIx~#vyX10H1Jk{W`9#orno+@&cG$6mJmb`E z0VR2fn}PC~THeGaehJ+5T2rCE1MRUEU#{;ZK+$SA2T?A@X&>|O{*&wuC5q5d|`!| zvGAnoy5YkX&P>!K%9|1*d2j>XRP|Om^oV{I{yh9ucwhLu$oY|LBiBW)kK7o!HFA68 z{>Y<|y^)V2Uq$vszKv{*eiyka`tQgE(VrrhM1PKa8~rtMdG0yU2cp}fH%E6wZ_K?k zx;^)b=moh~M|VfBkM7RBC;C|Q%-kKhH|PF2_wL+>b05k5TkbQtujIa(`*!X-xgX_z zocnd|*|7^^=fuv7?T%d+YyA?I9>^`)5W6LMab#oc>c~a0O|iS8+antz*F_(WTpYV1 z(tI5hJ3CsuE%H=!Z^n6%KSa-ud=t4SdPn4f$UD*S&$)k$T^YGFa(U$cqDEwA#D8Jr z53ya5Yhph_o87SP_pt7V+>ax_kKGu#DY8AfKXO;(7Fc^z?7qmokv~Vi&G&Gkke?bL`C66VYx)bW7~4*zK`PqQ6A` z4~A@wZHw)VoE^I}c1dhk#-C!B#@0vgjv29gV}FS~AHFR1YVO92ZzK1|9*JHRyCSwN zx-)utY;WwL*o%>?V^2kP#&$#xL@v%fH~Mhw(%eU5TO-#-e~9eQXt^=AHyZtObXV;0 z*tM~5qu0mI%)L7NMC_c%&C#=>PeiErUXHwzOGWq)T>f*UHS&IB0}AZt@bi(Yqi06G zi~NM5+Z}r+@?Cg$^u634!yo7V5Z)4bGeSl7Wta+j2P--%()GFDhN<|@iG7-TUW^L( zwa7D(4R|?qjTYpJN65Ituus+<&5Y&x&lyJvaB7 z+@7ud@ThZmQAK@i!{F-57Z$Wr58&6${7O+(qP%%#Vsu#g8#-d- z(IZC;8-DcBQX(#g=I0+xX+uXIJ$m#|%3IPA)#re!l&V*Edw$NSU+>7e{oE zs^;*V>ZX?RnsB_irLwv{Jaok1{DpH$7A~!>TUaq{aAi$R6rW%#icaI%%IX?LuS%m$ zZ)&Wto9zlkpU^ZSfArCcURmFy=<}-;{Ul|$qEBCjfAom@gmsEOZX&X#j>Sz}(Z^Re zPhYxXJT0U%ui1=?KED3{MZZFe>-6!JZS*=ido9(NXsB;&E@)_klbe;UoBjI+4p*B{ zN7Z2{lI}|D3k#I@j!~4}b2_1E=skcMh~BO3SVPf!AiEpH(=u3Ew?{fw6f6WgR!Ug1 zBuZ%w)+*MoX$r5bZf;sQG=E`rT}4exWdfJfW#$hXf%C$aipJ)J74>L*8k@_Sno)`v zhSpV8FB`mE>7x1#0o__k-PR~BFV@9{3J^pJRt4-8aG^{IYVrE=_Y1Pa- z1E0Tj-yZG26&G#U(=GqMDhL|_Ffo_x4gT|ky?u8q$+>Xks8OH&(Cw=Ko){ELV|5)b zeEovs?t6dA-TQj|df4^fzq&QA+mQcUj>P_$(~G}-{iA=M@Vg`K{PNl8H5uIw>-`@W z3ktoadMWeLBc-R0{^HnzY2V!u3GVIM@ps*>@An_GuPtw0&Y0&uz2&}~i%xv#nX(Nf z?cb}L+U?Zve}Q>TO??Gpf5DmYAMQEg+#UIUD%+j8^7t3J-AU|e&bVnIX1>`_7**RG z3R@#yb0}<8b1PZ2p=E5wh6(uji5++Usp;EuZa=O2lg~|lZ&|mx$bTZBVKv4sjPc!F z?i>95f-zmc7&7>?#V4NMzuRHa|A_HYUYJ84zUuM(*FThst?tGliL&)BkW zDyr%mYnjqhw=XJuZ{yba>-*g}^6l#%ySv-B{~32oST|Rf*RZAHOu(Lxz6-8DXXdPN z_g|lP-Prd--Cm0QM_yr5>Wp*c6Gqp$=hlw;@ty5P#hKI3@0LN8=s%4V#`^roMKu-w zSg`MyrA4ove$9iyZXNy`tjii2t5;(oE)%i;hpRU>K6%6ggI?Y<>Dqbaf9QsX(u3CC zH9Y8|UJ`w8|GV$sv~$Mkoql&q`!AmLDdmHXEG#T5DJsh^8B;WQeCd>lV<%25Dqe~X z7>!)v$jX*P;mGFt!jaa~WZ_8GM;8t+99g7nXpi~K$gb;^45f7%#__7+Q127|&_ak0syJ7+T8WKtoR3>`Oa>g3|_lcp3E9xc)Pb{(m- z&NQhj1@)MTMbpPm88c@5AaqGJk2&j3FoQz=_rwZ;^SFV$5puqOoWB0wxtQRejd>t$gj z;Crm2T9~PJUf{qql{rzn3AHB+haniu+sJW1RymLjF66a@jCRH$1H*e8IR(hMSxirE zom1c*f`y_u%!F|!?5U1wJWK6dA;a97UPr*Ib8#35Bl~e1O<)i^NUmYT>&j+P)lTmdLjE5iXDr6yq&!6lvv9GHuVWL?)m2Gt#c06p zAlUWGao9FkR6@k{6J6BK?{rZtl!%xU5&d@(=9Fq2It)>iuB;r?*8%uYmLn@jlI|i@ zYy}QgK-sOtvjBc21Ld+K;GYP%XC)4W`7-b&0FUgdn07G@m!Qd=3Jw2EkOvxZxL~-V z^xwiF1sdvI)z1IGo~Em-+@(!|?k3c(GjQ073S>7(Zv*v(gmPPE5H7SHhoz(CC?VYM zu~!}1qa@#-0D1Qi?uYF-3`Jzx&C#}QYUkTzobW#OpH=Q9RBQ(h9|2|7@ZSUSr*5d> zrX&aAFNF99AreJqg=2jJ$+?foNm6e-1l>olb{F7q05C}q?IXCl$;8OcAfxUl)L9qe z@M^JKyDx&UcVwVk%mjRZfQgH7$SRS6djR}G_C}d3atx4r30ZO}4n$AOb|CFDbd{L7U%WK58eq-)5D6eTekxQ7Y%;#D|o z0IoCD9G}{!yV_Y}AS+DdE`(h32*K)h;_w(?c3Vq|uFfU{-Qhe9s7DEvc?S+J&y>S* zRkqrBgM^aZNw~)dcj=ut+!~kLF2ZfWjwq%u406md2X--59w$)iT{z^;5^cf;APVu? zyQ02{R-^F|$`zpgD^Zudh{NYg@G@pE{GckGCxW!Oyl$9HOTSU{1ktX135S8@nA#>< zpVE02tuJ$NeUd19yn@3OptQJFWAPUDws10iib!vN4Tq6SZKhbs)=C8ci`!*L1Fe9wBLaCC8C}D z9S&cDHpiqrh0&H*R?<5`&iG0Yzf8pb?{OH6jwJW5U3_XIG;d|pO)czGGMoApqW+ku zYh~(9jJhtd%;tSHc)v>2PyK+y&7ki6*DfmKy_HedVl|9SPQQ-%8j+v+ZycTnd5)#Z zc1F&(VdDN0_I)9yh4~r9W|3({Jv8n>eh&_^Medghv^qgl3>$R5gX)(_Xrlj8tv8=z>a`X zzO51UPtfjh25Z8L3CVRN>3xD6MpNWh0Mfcifvk)|@`OJ-qH>`y@7{>|Af&&`*zh_f zBvUB-gV-$V2sRJa<3$QW!4Js*J_zAoF_gK+!;Xj#2=iSQFjE`ov4ENbUn|#lzko>o zr@;7-K!523(76uK9gw3&Q4gn{pO z@>4>7ode_xK(@ZAkOQeD3uHz7oi8BtEZY8rrs`lIyKbm&;vv(U{Bj4ld`4X6=Yh-Q zwa}O>ZLf5`#DShvw;Hpj67W6%|3$#X0|0ylzy_*w7r@l39LT9wo5AGW3)trbTY|TR zt+92uIuG&YW5C@G;Ea0u%v6NfpMm^>kWUT<68j=4#a3&xW}s5on7|${)vK|VEPgIJtMe~Xai)U9f%)#VpQPB*#9D~(OMMe3uhZYSjns2fO$Na8}@+Gl8V=h?l-mECg z{@NuFI3+@%h#Ge>!hRcM;2VgVb!FAH4J|cI3F1Fj;wmH&>kS?J3jSJ$f%8|y`Ktxs z{ODQuWeZkBepaj03sA;a3C6U>D{byy6Zh7|;C|&65AHXC`^qv5sA|d^%V=>IsXaB7 z+AOxfZ#dN6M~s8zV7zK8wd^|(Sxn(OFw595HPO^mzAOPl4^xT|M`b{KLx{$eK-{`b zQ5yRL(c!SSI<|YKi+W_&z}!J<`5@oYLB5JXzRE$q#2{bi*8ao^J9E}Gqc)XPH&&pD z-rVjmHd-hL$8U+_-db?1-Hr}pIXDJXs^%LBS&Z+Rl5sT3*iX3XI^doLt{dTe>fyj` zaY!`ll@NInM1Dum9|`&kpre^cKSZKBegy{SN`l?+3c$Z7__7AT&pQtd8o~Vxc!5Lm zjQSd?$=uQea6b^P$13370zDLElft6N0+T69IF%;rXs|6CHJUpLcscGwlm*VP19x1+42B_Z;QafLmsT3B* zFr!BAqgR(>J{Q)aO>C^LT31%yxU7XL8+(&gbYk)BvN9rLGr#!SlG9k{ zv35!rmHP-3@Ol#a%T|be_cBHC7hMJel+HJ#A#P0BNhul6J{ycbml$vAe9(5xXp8Y5 ziSdsTm|i1=npeCHzS4ziqQw88f-;v2E~ zW-8Zq^b86VerH5Mrt)mZvg-P!EmcV9#uCaRXjtrRA(YlZ2+~YtWQ=#WbIk6Tts{YN zkQwmjQLUygc;kuYnb@j-HLEr=%>LBOC@PwS6sk9Tm1FB@U^gHPGnLu76%BFzmXNgz zGZXA(;iTFIjQv}mV0v}#Q&v-1y}FDBMzt&@o`fRFCg^2GlGmq3fEtk!c)vfXTHM%J zzHTg*LN+I`B!-m|Yd2UrjV(yc4IQY_z_1T$ZiJeFdDwBQxv{ZgIekgfk#%ZS;E4w> zC9t%IvZeyB;H11I$UBqrp2hs3SW8k{TVH2SchWQk=X5lvHxuU)sHhl&SJ0zb3iy1G)I+!1pc<^~E~{=TYfMxn z8WVLDiQ_y&EIc5LcX3V4CqQ;1cx5Wf@>pomhl)sRW@$&Z$#_l0a*T7DIU||jT7Uzu z^-~ZN4YWQ>IHwiP!P6?FO>u<>g1Q+yoiv#N@*)TW>w8g=*0CMAeY_wlk$xT(1a^%? zo?N0-+B+y~AuXjg%<3|L+3a&^CO;3DgtR49;Nl=w zYbVw=;O9a*vVMI7Qt^1L1dixUIW%1BNQK&Z4l*ue;%iumFRiAXnlP!r~Skz#xvlJNu&Z%=T^7*}4g z-1PMGgnb)R)UL4R)7(NT)qqPFuaW7*1cleB%*Z>BT;8Mo>h9q2m=yc7@AT>^ac%72ax~kwTGFRW?I8Ws};` zM+LkZ=~puJhiHi9fSE*}^PtfOdsTU&qf%HloxkRdH)ED$S)!%v@jAGuXmrtt zvMI&N79U2{8R3YMo2hh+!i+KCOS@tRdgJ|-tMJ4dKD+AWfb=Tp7@!|Wa+C8pZc*6B zf_5j-Vn(`mCqHaM|PNAXI91L?%PI0za3w2WQbqKUV z`4L1?HOLqEJM*X`$WKPzHKYM{Vuc2BR8z~ni?Xm`a2ZxW)Y1M`ymgp~tlgCLE~_?< zGFpo~%uk`kOzke=0CLtI5N9g=(6Ko?DeO;zRfi4hn7&rs-wMEW44@(EXz3<Qj1*PH#=oHTHgfwOyxr~>#SZ_ z?aFqW} z;Z*S^-R?)DpudUeukr{&>lKDgUIg-+L7u7f?IQ|-h8F>Zmph2D=HY^t~ zrlY`AOg%x1+nE;Mp_P!wZCHy#%ZruPhgtRt*?8-lKc)3@#&Mp@WoCF`Jcjulvx?Io zF0d!H4R+f@Hr&ZnVf_v9QF|j#-OZg!4K;@Lf#sD0757qrQnfj+(CMNSulg@hs%Gw8tWPwCBx$VR~5! z490tNmkjf5zYsAPw0~wI&Ke+(Ev)LcoB4CP%b%0#us%|DWTsM!@<4H6J0HBQW}rkz zJX6wm4k-<2L^73MT}8^`%QWRRD55I$5g5Aqd+!pvX2yWyk1B&Ut%y?Wa;2RW~OZ?0U^7Zf%01BFy^~ zL&d8|#g|ex*JFimIfJ{UPT2Z)xyFLqL4~!AIEpsQlh!!wctw$mz&< zn1K>)h9W)TSkE`)<(o+3mq`aFKYFlvjP%2H`WS`Nqps*#PeLAE2PuKWJUU5hxsu)K z(b(g!Ott9&daNreZ^p=JDYoZsDk#9)=$4v9v6WI#K+B}dsL8m6mH)Kggn;zVjPxvD z68FSvny4R`T*hecN{q`{k0>7FX(<01tA7u5#Dfb>+0d|X zTEXke!I{eIqAQag?f6KIx9Da+#@q5u%)1{5 zjJr3rfL4$LA^P>8?-wb&PMKNxNg@l2J4*+is}7g35`N4 zlNhzxV`VCp9m!D*&6xaRa}QIFlI9~^lS&se*%M@nF^Of>b>^swXHS>2F+_Dd@LkF{ zZ1T`PUA^P7n0SJoZknyhFOq`kDz)Q~@x_x$Cyk#vDL%D$R>{PIXj#e3S(u3&J862^ zr1=|C6mTa8aFe3e125Hs8hj$F3iVTrw+=7D8Ftkbmp)-cVY*{cO;hg z1n3{15aJ72^V~scFESWG2Ye@?_#@V55n+545pJ#zTOT!q*(VVNco&MV9~6Igk#2tL zz;Y^(tztZ9G1$>!4x!`|)|MS5AJn%mc{Lcgb^T7W+@IMdy&jbJS!2dH3Ob@jNlwHd7 zaOVVy7kNG-+CK~>s-@KIefbBk&e^VNz>Jdah&4XV;#qrPVb8A$f@+A}8Cr@?hLxZ-?}TptF4 zeL{+prea~8c^lVeWRBOTXX?{3^{JV9X(qR!H6JuuVdj0Ci<`071rN8z^vumAUuDdu zgE1}hhLSDeL7Pj?3@b=EGi*#n%6XKsk)>=58>L9uK`HB5%K9)obRYSIe}7w=zhy)2 zZ2XrNLq@@gnNVmbgu*IZr(@OeKmk0`w2E%y+H6=gD^rhW>N72qPCy2%p7G%obdq7dB=xD{#Fd%oUwOiWY(u6vcHqik1Qea0w}hGu_6u1yFQ;ramuI zpPQ+lWa&B;dD=MH{qt>Ijd@VY>HfJ)W!e2FF~two{R_#eX%GslaGj1-3xNW77FmNc z-Nv;gu&OLmU!18gvP@cp3|K32#3wQq_W`*Sba#D0LSV2)-r=uvA-;$!0 zq#(|88`r9!Xd+Xu%+xC~^`(}sST?I@Q)KriY+a2?DCKm21yfme|5B#-!McALSyd0A zunO1dScT=GWK|PcgEQU6wUw}HMW$YzsV}!oIu#kPR&xIe+a%fj)yx*|{^iUH$^A8? z=xJaDMRA>uqF8cCimoRGai-h2)&NE8GxfSmz1C6`3msk6wBAKM%3lTvP#)LmD1RML0AEE)<4m`4Z5@j zUylrDEnREtZ>*8LzxogiIGGH%0U}@kuG2B#4xj+OnH0yFZsXc%FyPco{S-_4JCW+t z{#09g+54v)g7T-6@^?W3l*e^C%0CPg!1t2UIMZ!h+W_U)XX>q)`Wcq~k08TYN!Q!@ z8?BP}&o~4FHj)94LIe!Jbvgz-2Nb|hkm5MgZCu+71J2CUH(A<0k5s4jXWH7!-rsZx z%AZBbzW@nP9@pt8|29wnzf4NwOt*3E94LQwroJ^(-(uqD{Xttl;=n1~oL%fNvOG4=1{@W2ZpC`-I$<>1+nJ+paLqmI`vK?F(ZI zu6I!5hSq8rMn%NzAH-~X=5QuYl0Q`C*`I-~$7T>C$`=k`qfwoLt2%R>Q9*N&gs z zEW9Ka;W`}`^#TguE;x~k=r*oB1Q$J+sqeM?)0-0=!B2f~az)Uinc9N~;h(;Qe8lCS zM{WPe5%i$sp1mIK=|{XC^>$AV@{C7>dmbkD1d#^!;5r@m3<3(^7*6CKx{YgphkIVg z)Su7PpR+uqbGpI&Gz2GC1ihT8y>Jj7$|vMYna<|;W!po>3vh)MLC;Grdd|Z|Ly6hT z-Yy!3JmV$dq8G_U!;uCT;W`}`od6WT$KXURqT9Ik54h<4O#MB}KZTsAh@Xmaaz)Tb zncDjY;h!;t{Ltl}k8Jv=$nPmfUs{(%?2+r{lJApa5Qg6S<9Uv|AgTSLg~EN55O!}gld6|S-(t;?agZ7s>@;qA6{$TPBq+q#q6PDUEshU;|PwizgZ zTX7<{(QRCdz-?j6XJ>H=d~ZO6TXAwlS}aQoAB4}&CS=H-VUNiEgNE>o!Zo7tLjPQ2bF60@*h1-Ua+jb)jZo_ptZo3I6fUn1i z+(x%?tq5)_w0w3mr}!g3-GY-V(n_+l!h`VHt%Mxo@>z-PGda=<56xw_k%$s+m)(v$ zV~lWFF}dvjkOr6GIvtli0~ElI;zTZ^+qgCtE;}hppOdA}&eCUDzQcy0iWbk3roKc0ea~igBW0sC^*swI&Z+OG+L-#DM^?Q6p|A?q=~(qPPyoM-6In&KacvQ- zT9~CT$kOLqCcT3USSwBbEwoLN%W#2RhQ@qmg*11zm=t{%te_~a(^2$upaA}W6vUZs z<5~q2U7DqrXX#6_^fF7=FOcVS|5965qZ~>(=U$gEm1XyrF~yN0-aI6`e>mPes9E;= zhf1>TYlwzzxK78m13&@%J=uga-Nv=$ux(kEUX`UMEW@yofC8JPLRe-SCKo~#vxp52 zj0CeqDuilMR0S(2itBU~?F&SpE5CH>losI#0fdV+26vvrvOHjb_RFO^0B> z8ZuxYM8E)Cr(?h`O~xX)3WqaE&V5Py2<=B1t-^FV?&m9`ayJ@rG#9c>vb607;h)8XJm2M?3vB<$p|V|a&o&SDlo78Byxp?| zdB*v|Jv+!fRor{kja zKmmL*PUIrGjcd2TMYsNcteppZ6vg}h69^KOOUPXUN-?<$3?X3@!Gf{T#6mRcf{K8E ziWEVLfC?x<1hIn@6;yf?1O)^}K~$8cVlNaMcCcapTK}JCW@mSHZx3$${dv8})Mw`N zyl1xW&eh_}HJ@8mrEw~_4S{b4t*XUVq`_xAS+4Z)S>^IEXV3}*&+-5~_;NaftqR6- zJIcgL2hWp)XCm@|2k|g?rojrv_aY!Xl(g7$z_YOye^%p}t|~pCf(H@!rq8BYY-1XD z9wN&Zd>hy%7mwHo4tn}L>+(tGIIi#D%%DCt1!J3uGVy|g?RmoXF!F#6@i5pH!V1Q- z5fC;?TI@Ao+o72)QZ*KlzOuk+mQyd$H?*xAG0@IX6BUI@!yawr7qqKMz#!P z;tdDc>xAra|UO--muPpjY=1iqQJw-);_4QlJj z@)O^NxYwm7J~U?92mcM*2I^yPFt%q=CO&bneN5OkA`jRQ4}jO-1Ri60zf-xIPo zkq2amhe1|^Pg7uA2LU0Yq{WVjbl?pmyg`K5kMMdCessjX)fz`JD~hmc5p@+rA7qM# z5$6`EXb|yV-qlBr_rqtE zkML#@UKZh{8e1ib!Bx$%M#St`mzlX~aS2OZX*ZKtI@8<|Wk$SI;z6BR_8WlB$&U-s z1^hrfwI80BMdbwO2P+u&B>4y_X|Yq_#_17$T7;h(;pN(g0aUeR^zRGD}v`{+vnvT!-%958`3`nLr{l zt45O_2q|f?3i#78!q1EFb0hqm2tQl9bUTXK1-`AnBSh)fO3wpo@6DZa7+Y{E~K^NBpaT(<4lg>*G7cMbe=0 z`L*{V?a!fUXh%GZ_E%vAaB=IYeCuk!2e zL%Lr>%g~K@7~LPh3dV1fUWAmyZAR!G5aHKGc>f6Rr=@?0GVgRB5G?&#SGwqL%$0tA z-Pe)skI*c1BOXTgcd&x-XQUS)CGmbIbYCCgLnC}hgb$AJL0bCvC}txf>~MR=$Wxi? zUG-upq1P;$65?SfRj(l_ z{Xull2qi5x3Y11h_)QUhV}#$J5oMta0F5nbq|3*gm^Vo&s_C1Q@`0}_QCN%b+z3{ut^=1_)s7-d(&3dWa{B7~I08>dkANQ6He;WM?kt5CpZ z`?kbKTz%r|9!;zK!lhbJYq(+Gh(xdOJ5j)3*uq841*Pn2O=OYl(g79aG4w7 zb2OCU$OSB8#OAt0%n_U8AF=tQYy`}q4Dm3^#=#24qeu}#N?L3&lr4(zg%Q3$i@QzL z8?S;12z>XImPXj3NV7w}MtwV3J{H00n(~u=NKY(v{S=Gj$YVO|{JRm|m459~N1>^e=5F$!i>}enp5xy?M z*GBjnP3a+3b%qLNBJfe#5Md$>N)MCe`iS=|YJ)*Z7?jo-l-3%%;xz%p9-)Re1QUA{ zWn#TU>=`093wa=hco&1#vd^tcL^Bkkj&Io^B6M9b7dtL=EAn+0TFv51FL1+_Me&Cx;9|jZJWf0nFOs4k(XuU}7ei%&a zC6tK|99nyb)@I~^7UE%O?S~bN_aY!#l(g92p!HXT{~6(bMEL(Suy0h=Z&mOe0^jDB zk;DE<1K9Uu`ESH~nwyd1-qZLCH1rkkp9Zl%3}XKaAoc?_oRJf_!#aR6@vlSdA0qZ6 z@<0snFvKzrlf-_9F%hGr#d2~w@JJ4?mBWwBv2WaFs(RH_P#uA9e&yw`NKUgu?$fi# zvUZLaSDuT@+yWyxbQ?>aZHQVqbfK-Tv5!Q)fA?O4+RY25br{M-?Hs*(&&`3OHIWBe zh=-wd46I;WfPiRG(qfH4t5FUw&f$q19@oGMRn;OD#1Z)BS4j?Qlm@T_SvJY>o@kf2 zz(ga^(DSR@0&=`v77U)NsdOV&|hwoaYcbmxx_}JP<=X z46&}Tg0Y2wh*8pFT|n%z9DZpIzeMBers{Q9!4(L6^Q&79yDSY{J;<`F4_7xAmpQ*K zGiY6E(7GgmR!?fTTQIF&C=*>BT9*^8E0G6Uh=-vy7*;UugMesJ65oo0R{tE{FNgQd z;e9l)A*$+76 z&ybHvt_$Wj3RT2Fhu;9=HyU~1hjHwTV0GA>U01*!ZP{0btPaq(Gl(g7<0GyY@=jQM^IefOJ_q3||j0)Bx@a_H<<*<2a z(Ayv_ee@Q&^vsz!&ww}A05->n&klh1EcLM{7~V#diG>cl1qAOoy2w)e<#eUA4Y+Xfe#5a6Kqe(PLr&fSam zseui_Om?D7taq3^Lriud4@?jb!{l>V!T2Kt#DtO-+Xg0EHIOe1A7$cYhsSo}@eT681Mx6Ceuou|4PgVLu1%D#&&5=Dh?EN&5{6&_#bG&!;_P9vI`^Fr3FM!G4)WDu#CjX#J z>~@&!A}0SL4@?jb!{msXk_pyml}spUv9G}7OAX{mRil;)A_#nQWPc9(G7TU(WVz1= zWWNi_m{lPqHqfG2`czjJf@{k7}h^OYE-swqrUg{}=9n2dbpjkpmi~SEo ze#_y%YAA74DWQU51U@K#<*?tEQ=Q?);{La-xk#LP}aJ4{~#Jc}^~m zXt}4UdZ(-43A^PHVpb zW$f5owfWI6)QA>__T!~?4ET8YEg%-gYc4%N&N!Jfu81BVsy9Xu5y$z9vEpCqRq{?C z7e_(?TtqyKi?_oH#$(7egp|aqXK=AqEi}6yaoPe##(V5TzM-dO>=wq;g@mz8cAtfz#794G#%iHDhw%W_3 zC;$LsblSUKnxoTB>Q^^U+q!WzA{|KRGBgFDh=&pS60BhS3<*R?NsC-y3v+p8 zF25j`pReU^MzMELE^_6H3!%&Vti94tU0je$H-4MxNABW$e~o}~alh)c$kA;O0Y?!J zr|D%d>yG$%dY{!+%k22BIInebW zP(L6Kpb!rO>MvNq_!k5Oijw#S6`%&^@T9-D)<+H?{sfiE*qQ%CH!Jq2D{!z zX_!mN+~NnjNW>sF?%>I!wuS}csfIFfy@O{c;i-;1;6XeLp4za2aW(?NLrJW32RvhQ zc~veSqY34ydQla`5ctlV#^gN$5u&=t10ux3AZiRN7$1Xx5K$60zJO?QE}x|NFjc9E3Q7?8X3(@;HaQJG zP04bqkIyuhk2!-TyGX<&H}2pmrM9L8<0(U#nCjq}LU@`X4|os{gXc6@!MG&?!b3^i z)&ib+xqNOepOedHYe=W7s%NO+Oa#73v?!O&O9N6nYQVnFx-b`qGj)7zL1#aUTvlQp zpy;_Y*99cz$bGju1)uHaJK#FV_SJpWMZx^eMisHp;kSVJor65^Lp%(>&eR!Bgb@%w zN?PnG@LQeBSLO1R8r~(U-lZzI41sTkt;=Pr(}35F8nEH5^}$=`!ZRn@YL}5%Ww2Z6 z<~!_q$mSKhb;0a;pVw*#3D-j!kJP<=X46$*rg7GK>M2wOadmqH!%jNIp@^>_@+f=>rDwu%4H`{jS zviH)!bvs$^^5NR;;xeb%doC66u0iV^H{YQ(k=orIOzRGmiCqq@okZ(SxYl9%5MYD(&B`vnAb_c$*Hh;f1f3G%wx3+yJWDLsKw%Te^&~G$~oweONA@A3w zNnu`RzK5K(l(Sl1XRa<1?;^*$3eCY5VBcLEf@tk3c!hWvuV_6e7~e+TAfzO|HicIo z*5)77=6keDv_=%XRW6-EE`8{_WDeX1(ifcRtt}FJq!)Go@HvdFxrPZd`YbO5BT&?0$i1Om!Dy{zjj?R@qZ+aU8-$d!*e~$v=i2F>aP*t2Gz)XB2q1(rS6`em^tM zrJsTLT6#ZjZCYzc%3D-fdFcBWbOHK^hjE}9z7L1-pSA;(v{+3za9AF%q19JMu2=nG zu6mPxjsGA%o5W|S&(skQBR;CcA3>tg2qi663*wK=<45H2!?pex3cMTXk*)C9qX&pb zJdAh_D;PH>(FiGNu>y$C&*QN?9@YAfRrQWjL30GYbLyk=SbiS%>4#W=otCI#b@RMC zv7=lRBHtLun9D*$5%({?)Pfp2DlhQ)NlTQ8x_SEfNgYCT0`h+sCu+^6{^utKm99Ykjkq8`WtBE-WW z8UQO8_eMa7C~2|tfv6&nchr0as!GNhRlXT?VIHeUgO6O+s?x{jLYI#@gDMO>9Ru*l zg|03P#xoRpMWuu10>VSzU`>9rtnxiS9t5XHYi-QP%)Oa(${^!HDGgR6QL;JqVG#J{96&5KU2t z?zRz8(qh*E(ZD=DK=YZZD%opU(P~w`88jr14NQX%EpWvK`}hoT`Is|kpn+#V0G=xj;IggLlchAxBOs!VNOHDj%%(R*R4I8bO#byU%qeZmDEC<`8gpHQR0yf0MVA~BV7{7yn zuu;-t%YbdEX0}Jw_&^08BJj<$6?trF8q7W-%jG_1D_mygOk4WjkbO*DtO!Q-3ChHB z2ifC|f zeY^aPE;aFtG1H#@Z`gjOJ~jqp`vqmOX*=@R_B5Dfk>#sCW;Rji z$I@@}=HExi@!tAA*jrVfkyrMTZit8Rss*INxRks>NJ+d73$MP+<6q?Q&$UY}Q2=j^ zn}1)rE}3Kag*%4gbLoX~^Y3dCdIFjPe#FBFZ38P9w<3WEDT$>GA@tik{!Jd=pU3xU zt!+`}#s96VReS?c-g~e6rDPNTJ}DeI&aLlc{Qh@Wz9-+#Lf7yO@i4x1f)$J_$R~u9 z#4qE(w;%KPfjs_$cC0fB;IlCZKe~>YgK$84r0&4}Abl|g;b#(h37UdX#KQ=^8dfmw zMgkF1(qg|u=x=%a*F64<7TOyH-r4e-D^&anMf%L|7guTWnO}+p*#AckT!Sv)0ODaB z7y>I8_b1^9DQU64;J}}G{12^uD002(|8&)xnE&_>;{PV`*P{oBM?8%9F|dO14I~;N zB`ua2?Z7jl{NFtOkJev>0`D}*h`M)R|263U^B)|j7DeA<(FGhpJd6YP!V1Q>lW>HT zv{(%|kQL?CqxSvd`;hBZpXI7I=~s^)CvTWev)6nH(PL-n#JVyoKq2={h!(cpXP$n8U zcqr5~DdQsJTNd=n`_-4?tQC6A;p)F*| zqu!0_SeK9}1qwZbni_~o0uXJb#*Pg}v<+o~JBXSQqV327BE-WWdJk4GejNcJqNK%6 z1)}mOKSlF-Usc+vf?WuFGw6&cD^G*ZZn8Yx$L9=}k2!%RNDxg&WebeWHC_66=JaU1+ z^L-oG1uh}_b@^8=~7AQ;;Ll!@~lY!!sJ8qS(h}JWndi=*3HMPyUWa+QeFNVvP|ltdoZ$U zC==ZrWL*hab>smV;$e{GzzW7S5fCy;TC6{i^^5Ypnp&=^R9gjk2z)bbV3hSsgIbg< z2lzI`fi5-C&zNa_{~NX#^)WCQTRzIf00-N(gslL1z=n7jY;jn@xIO~HMoIiiIk4TR znI%+>VinLLhrXFMI?8TLgIQy;9OYv++GS?Wv>X2$GDcmD4o21lWnz?rY$PEoK^~AH z9tK%ISi!gl0zyVfi!A}N#ZkT}$`?lYf+(M_@%2YBTN-8eMAcQ$sq_}sV%Kf4NKO@; zUX9mR*9)ch=H=ajsP~(U`KYm;UOmIfk^H60Pz$hM2T5XSbYai}>_)b;w%%jJY7mUT z3h^+kZiW?%<(hg3DT&`F0jm{JzC6kwkMd<2R25aV-)dcA!#aatt#DzPb7Z+YN5tcj zk9r+=nPh{@$MyE=;ZKtMTa|po!^o#a;$VC~$wo*?i>-nDr=omyl&^~Nm0G@B6>gnx zoS!nJ8w0#LX@FPx26$zf101~Ew*W^$aV&JEfJanBMdO&VF;~&6^s`W8HALy z*ai?yOhK;a9kgvpO%>9O#$cQQ~R?^A^8}C{4BY!8a==T z#KXAoJn6z}4kR5RB`vlIF1!%s&qw)lT0gC*7O4LPSHC$ypHD6SIlufDNxr=V8{%Q) zzoX>8Y|E!4?uIX}f~#vW*g#9>U%w@5cFd!e-IT;VV(9)h%D;*7{ZYOz%D;~C zue5rO8tjKCd)RiMH60+obsZ4jK%IAh_e(#_0p8~u;IDn@ucU|J2mE-56F&qGxRLD) z`1b^k7N`R_#KVAV11lKQB5?$ck{0_F;C_knpQHSzDE~3a4`^y_Q4FkV%-a&OUtDD7 znExzUsWJb_81o;E_yI}B82{hMjdth)ZXh1U4SRJo%XWj37R!ot;MHTiT8wALct(u> ztKE=`sCnF|9&>J!nr>8!IX4vy9@3~tbBYj6YcFm8;16^yU5-Jm31 zm4q9)F`g6Sk(hm_l$IuA(U|vKIM?+-9ic6Kvg_3v+6I}9RJf@*cBq+6GYI3%x$(ipGF-JA#j;i{o zybdX&CDAZqh=)-|3y8t^9#VvmlDP2+Wk<*OQ88Xui<^!D)*$9Rpd9V$6GtVDSl$2c zBQ^sfM1$ZFGqRl#t4~~J!U$Xt55vV??Q9nDKqHj2SRuF^6XOjvltst|EMvruafz5C z*3ds;;3<`tInX)yk{Urlmw5Tk?o9M6QV>*rhyXTVJK~f6^x%pK$IwH zF%C-2V!SNIOJlsLM)Weu0MIxQXy)>1N&BG;?Bub~d6@*G4hp5l9<-^%VH^mKCEc%} zS?ESQjBZ+P492gMUWAmiSPSSrKE|8J_;Fe^Ej@-w_1)-+v6gc8+=BkPPi{U% z6>&mLKe=g1z&=ABfFT|R*bmehR!u-az$j_4wgA>9##?Jzw2l}Ge^kLw2zc;U{TUyT>s8pw_!%kDAnb<`CuD{(oX z=$X~UfOVO%gHHcLi#Kr^=lPhIS2qs2LU5W7yvD=8)1;_(2#KREl z3M&{}2#6RZ@#{GtHYLXIkMYSGS2tC!y9%yA;G16$#MqQHaP=U|={{T!xVTyx^J|Jh z>wbgQOM$vJwR7mS;%S508iUkR2C3Bnq-IcKPX{BKi83J^MC%CA!^i_7 z#KRz33@aGVMnH%tX|b(9v?azj$M{Pc(GpefF%>LD;6wCsjBQB+(c@&fJ%(o?YGO%5 zFB^!q7>G6-h+Yanw454yIT+Cjl!@&QqHToe3FHA0;$aYNffbCOML>usiT6o?Xm5;v z65}7o_(z)3R#kPI3brHgZG~UN*xocKy-b#$$GoTMUl^43f`;DwJ~4=WY!Le>fY>Y4 z@E5_vUPYPs+#&WE5!-=05JNl+vE8tO@mmOp7$q(CGl=~Z<3Gmu0gY>qs`r5kK1AS~ zRKLa8Pif%#h%A5g;rh+R)za9@|76hm(V%r8fY!&0I^Q?ScJ)c+0x9=tWsA~VDf}auirq~hr?6CYpUkTB& zV(jpI@9n`O@}2u?;;?*oiq$~e{s3HL<-0f5svGfYsI#6v636pLeQES7b#g?0%b;tb z-%utF&)3&P+4=DOcjN&e;$Z+Dh80p^OiQ5=KuTKdXaGDapV!Ujb@F+ErdLx{rA5O~ z^Kb;d8P_169hC;XBgnG8k6r_po;l-=GT_xUfYmYL1p)Amq&^x1!>ffdQQv`AkKjd+ z2Y85wfmZ}87$1#*;87C4cMW*Q=5wyG#Z{$*3W^ckXhKCjS7+N(-ush|S_-yFFppPiou5?Y^(U6}8^(Rh)IM4WHT zk%|B&w3r#YD45B)C=(YtOe%@VdB_73#KSP@1S=R{fPm%*B`ww+OuA_x_VQ@P>Sw+= z(leiRO9O~pFs(;EZpW%qrt|2mvZn#0TL6SE(8GELL%1AeqK5nW3BB7EN=dAT387>2c~w3ilh1F_TBoDT zI~HSIt)dE|ybq(s_+it-D0eJw@fQb-h5sX*apdSj&;dsg598=#u!8Yiau6XU@%zef z^!9u{A)k-eUM@ue0H_%!N91?pR7<+OZkfQHZ0U7yAMa84gxC%cY{ zNp9RZ(r%^3rU&mpwxLW+b9Nw83DI`s0TJS15WNE{81Fzph$xBQpar72`FxJ%^RBA& zo(kSa;M;`CC=`M+N^P@Xeqt`D{}fe5xOg&g=&woAa^LQ5)KYw7cJ8VA|y35HGlK2hCx! z9d#FMOE96Ds3JBygkB;-*~kMS#KRD(N1fp%Ap}H-k`{Xxgx<;LZ|C#3^7)&ZQ+-vn zfeIQT@Xe#0`RtuEI2DrR`}y8u%uWN)JAmRn#=I>t8OM9^mb^Z4AH%-suMu#Vk%xSJ z^;t|Rb_U~Zgfj8IgZDkc+ZcJki+C8k$HNN7O%V`YN?Pno;Qb<>f1b}j(`;L)dM#CO z0s`M0+?UV3NQ3Q3Wcjs^?LL<+F1DSMs4x7;#OFS!pZRMX3TioZzb_c-sVEa)J5awO zsHY(hP!SIU^*mU?xD5h=N=f|G4WRy>&wtD3zvlB_G}n%*YK02UN8p>Yf912^)8JZ3 zmVf%V{^fENzXO$b&i>|yCw}$e{l#A+0IzXsq-U;0TK)=#+zDmkPY3cJ1i3Tv02%Qx zkbA)j#$6B)WJ=;g$pU;RS-`Ukc+CR)meZB0-c>5N8i8--Mhe*B1&6-nbPZY7D)80#hX2i4LO_OGMDbd* z#XHrg%sj4BR?|TRovPzuY=O82p1)Cqvz0fBGK%WeYev=O%(27(5`W6z0t>$uS%6=6 z`8hkI>S7$7DyYpmvJ#tcgt3rYM_FKZ*6FZLHJT1C=#Fpf1w%YdLUyLm>6pNn zN+Bk2hsw;>7|IU#CJGby#sYpr0UuGohuahQY)jneP6c}c-$E1M9Q;4m?R_LB@Ok84 z1^l~3PT)}mVtDEaJW6676O8!~6L@5SoWNu334A`T(+k86#vJy|q|vgks{c!0Rd!z& zSnTEkF~VhH^6|~2n`O6SgS$P%OtM`ZYj=AgtE8TLlUf=0v-q0#xVKPmEOCGrPbBqgze2Sol>z<<>ue?cz$g(x1t6u1JC zpmmSjHS8%8zX9HTbPR=hsZ9KeoLQ8E>c}~eje8vUTmC;1`YRfPP{czCt(GZi{$mTJ zq{aS*&_4_KA6jU2-h62dUfw^tIT zB&KK`Owl@gS{?iJrVesh54jy-D)y99vCeIYA)WDGOshk342CoTK~Hges191M3wxS` zbwWw24=WhgBS{D;X|Y+5_DCK6u$I;Ux$HYF?MjmN2n3BQQmh_6sJPiAt|3~0IK;zn zi^B@WMI;I#CGp}3#Lch6=V@^X-v(XA5A|6IyEm*<$ND_vSk`~(yfjjH+_qD(Xa@kA}lLGsaz?~4} zy<~X*pc40x#2mB(iHL`h7=;y#^GF&(N?L3$Bz|0%f21YGkjuJw7=G+y_|ZWHeo6vq z-vxn)hY@%btYA#LCK5(QrpUv_O?Pv{On!54*b%3_J(pbvgphtxAlZJQE_R#g>AmZv8zoK)2&UE?#@Tc zFRzD|dZQltM?6gbePIRTKGZKlO5yAZ}HfDMa>Y+ z=!`!VZSbf33ewOYb)f#{+3@wiU*-tC`LSt;-RpD@eopqkdhYb3&q#e zybP2j>CQ^>R*qwuD5|=8CAnb@ikt6qPI6)(SqvQrp+ndz772???;M8rFPO{RSi4vF%9i`b`*-(-Ub_Pi|1ujjetxxrXlud&t>CSudl?% zHiYfbN&we~V+iGuBwd7H}g8xRnGvZweSs0**mN5I{VPfHg?hWFw>`eu=mczeHSU@2{>zmOL(v#Wh!JOiyt}AvTm|h~cn=+1d;#oQIv&y1aEE znz#z}p#$+SI*#|l(lJJAXq!qyd(zMsb)f_Xl_%NT%MiDSIRakfW_=-^2jbj~GZ17Qwjh=)-&7*;SIM2Zkn(qa`* z)=|qEf-EU(oR-xwm5%dC$57OV4#dOgpdWaH@i6KiAtfz#A#_w~9V3t>b!^f)DpTpW zh;-b5`p|)R7#$;F1>>8je}t5@SSRSPw2o28A{~R|Y_U>l=u8?$qb@Wc9!3NGkR6QW zZ`~oJq{S|ShD)`EDqBO<9h$|ZsdRK99b=Ua#KY*IpQnTIIO-pv{IxpP4LZ7N9ph~s zy(EjSsWfya4HJ|G#KUNqtTarrHBi!GJ)xn8)^I!ZFxEd?M@ftIgO0w1 zypNW$z?O29#L?FyL-g?^jXg+zQngU2LOhJBrApOfqy~*p5|1OGYG5HBpj9nHE}M4D z2HLe(-AYHlfra!`2WN*rXNv);WDO!&_D|;_9!Ay^O4bTn79}lqJ!B0n3 zg&XKNQ#Foc4J9dbx+aF`7>Kh>?Ej9)kZqXWcAd58gmKttJrJ;&6yoS2afOr@U zZ^8=3Z&2R|DT%8ZXc$+>Z`Cs1QkC9Dz$O&3r|e<69mB+KFO-)!;#RM?7MSX^;N&~7 z5#un~pUW1v7a~)h)U?2qqSAM%bb^yDXWDpj<~h$oz-%^v%1S8UEJwO8heR*NZB5kLmA>>lzjv%80%jmq@=|rLD_v;*2lK2 zYvoYimrBEA((sAWfOr@UpD7KWQr~EVlK5y78m4FspCe16xm}}~l1j%k((wiAg9YMY zbbJjf7=K0mBcvqm=0nE=TE{+Qk&f7Gj>lbkJZ7cR zF^6>gg8I;bco-dj!3xHIQvV1kiKhh6u|Vti8(C6^bEUFCZnJbaQ&%b!YlA=Ki%7>m zs1F^8htWYl1qoyMJCO(}iC<%Zj-^@${gfl=P**BTQ)zgdG}J&{Xh1xShHRywCiRU* zC~2`Lq2Y-_zCz159JvyQbEWcxM~YbCNmj@!I!R|GDWl(%gfhg#D9eQvjB`j4LP}a} z9h9xrvT7qs${MF<%i2^r1nI~_eds_ujE*|6f^h)?(m_d!JqsNhw2r#Sk~%hN9UD^V z*ho5#LVf5!JdBR|u!3T5LOXY%AnjwUlDyvQf5_J4nhlj})=hlQd?`%cQIk%%KeNFv^<13dW2S zA*7_mUW2k7T2=|N%T1O4PDG$0;E1O3J(j9XIQ2q}q&QP8kUYd8^Eq(NQF?MkI#4{10Fb)fZ!(9d(qIpJK(eVt0je$sIk>O%+OVRTf$3dS9&e}t68i=oi*dm;Z#OF198Bt>1z z{qB(=e)A-aE#?nWbpcGF3h^+iE`k+|FC;YxDQU5Pq3WMP{<}va{n0Da(}0i zl~IHiE!aX9;$dXbkC(#uQj&v^k`_Cxr~|K2#IuU*yNUEerfjCUi>XmWr`!4%EwVgG z16WN`b~((U4Dm3^y2A>_-AEBaO5#_Nq3p;aeuP#=zgX&3cBDs&IKq=OltoCH{o|&H zhf#K=Qr62>MoEiBp)9Y6*Vf9eB4wV7&b%VbH+j)nJC&#yiMkq=z=e1iQP;u>#{EeQ zLP}b!0Yuf;iUuHyro6h~tDj0kL()J$%?b^OhtV(?Rxln!eIul##fqSzP-_^1EYhGZ zd<#=)h?55Txm9RDJdB1>u!8YO>Kh>?@v$;A99zV>mN8mYx)}jGzQ}vg*`i2YbaJma zebIRfY{aoe^yp2raH{CiF;sfIlPyoonv*kCD1bAFhjC^itYCaQ0&<3u7HbV>&Me|* zXlL#~uH36S7oBH10_Y4{oZ(3t+dvyqb|=iC4Dm3^>|b7$Kg)_nC~2`vpscf&HBHNM zF8Dg9(s3#2n67jn9!3ZKqAH9Zr2Y|75f*OcDh*vp!%Wl#3&g`{ zcobGJeuVl)NJ;#fFEn)58fGDjG^mTt?x{5NAPuuo7a9-`qhTJbU_6)lMo3A#CIAh+ zw1)Y}lGDVw;Omu2$5o_b0qR2s;$d_wh82t#QU3@jX|Zddqqo+v1X-j*UHtY=rJ)aL zcno!+0r507jD}U$%FN5rcUN3=qu-fDe1_e1H%rXGhC431)$Afv=#Kwa*g1GF37?0F znMHV|ss;Yz22u|;qsT4ATT2if&8|l8`N^MM8kdbqJ?X{eUU+eNc2TG5c5S@fgcnaA zfs!ks9bpLVy(=@XhOFKen+xr8Y~k0i`9)$5X(Mpi)og`*#C*zAC5===NLwL{PXJ&03PjcHUvEKpFF64a{cw$TF!*@7aw zP`&ph30C(Kta^|tE;cG+AeuwG?PS$MvX8~e`?kZYKKLLbqp;O7+1U)cvzgS!(MPF| z7Ve^JAf*X=a`nkT)x)UKDI5CcQKV+mWkvKNIMVbIFUD^v#;<%)5m+rso7HO2y~3VH z7R!!z;5Fm?u(&#D>LCt`)4lGR^tX|jP@{wU-iOC&0#$2@FwN1S9o(R zJTlIYuzTz+j*vYbNq-Y&!s#)B9>Zs*}^I8L; z{FjxHP?^~(aQdx{eg~jmgdzGJT$wot{SLNRKKhNtc{I-R?B0jKd*j(cjHJ-B1q_3c z9o5+)Psb|c3nOh%wY&hThC&s>5UNI0W)6p{5f-ZpRdsAVH+VYsh;s@3aAsD9d;n6% zqsFa}k)bN6=ORZz-;L0RFoeEaDl>0}zFTni2YvP9yk49iZL1t3j;5a74oQ)yPkGg| zL_G>sDyv!>BGeEHs;V%yP=R;|6;-#v3dZ9QK#fdVEDl9Qab6hb$JmOh=suS?hI+;* ztD(DxHsB)4lCWe9kF%hyP%4zQtIKgzG7}_of|7}Nnli70RU`EkRwIiIg|s1YKG@dP zm<@~5&NidT=7|&Vd|_~W;aT^_-3JVIah6>?#8+II$;7ZYOz(@gk$=mtM{iAl5n%{@ zWtEwwz*mNcTF^Hl&WGFjnz7-wz6tH_k2iP3u@QmUg?9C*zzbDH zMi8#!kEiWagn-FtJHYHttDX!zI?J|Ya^EiQg2zMfnGlRHgy43SnQbAsoyG2e;E8d5 zyREss(tKBv=G*<6#YDL^XPG0RDj5z0RPuOpm(QC!;muj_24M(q&b2?6v)H}x=AJme z+xF%>cDIymC}Q{cbF%D8=0>F|89DZ@{yymI2z>}c=)0&g^Fq+R$YS?H-{d%-Wb3<_ zP4cT@ll`Ex>`I0jyOQBnR&{wOngV?m^dStP@6yW5OQ7#ki%o;RskXSw)KqvNX(~+h zYgV&YWg993X72;O@tzL7U7#0X2)*4aGrK`=cZ)p)y${-YuTXktCh2|9uh-t(RK6it z`r(wiH(rEOCqIX(=y7Sj&!u^A=~}piFoa8kDl@Nx zOM`HY2bUJuE)B+8lLRimG*lt=1izENBX zUN?Xj!VtVhRc4L^uTd6T0ba}F{BfJtXvOQvBwmmE>9FN~f>}&eGTm2|QhAorz-U6Z zYP4Z@ZRBK`qu`nKPx^R00bVzQ7s3#{s_2CS`|<|dWYS`*z;2}tuIg6Q@a~3In!70B zNvXNM8d~H<5A+}&Mi1R5wXb7H4<+%7iqP|v)-#dxJZS7FyyBkni1Vb3tKPMwkRHlH zA>v^a-lG)WP0G*+B`x+06h0m2BF@)oo%fr&&WTkN4~RhGQYv!nD6pdHEnKvVqMA}Hh6pR^uAG-*;ftgiR69o6(kW4Lo)CV z+w&m#oMuS3))cHw2lo$CMD3;@p+n4b9?x77wOeInRP!7ty*16NqfI_PUm!o}z8?HU zJdB@oV-CjVeL9P6fuEb>{G~X5QF}|b=h(KmXFec;(Z1`mP2bW`Tcd7VE;1lq zp+fmYwdKS++x)fUz?n zE&>7cP2Y;s+B#JWX(*~S#ju3g;FiJ)#*ZPONkd7Cy@w6%-8g?I&fnG>9IYS2b_Q*5 zyOXw;cT#RIyR{=G=3Pk*yq&UvUET(q4UU!uVtf9t8{E#|4Q>S*S99}&ICe(nmgKo{ zEB0u6@viU8T@`uuryfcowaXu9m+irSpSHUvAPIwwc$mRn4J#P0LO_E}NsE1q!Tu=D zKhz`r6mmWLRq>%Y9Ntug_(*zc2U(3~%1g7)aObn#oVZQxQ~!2k*Oo_b1$J-J9Po7N z*&6n0AZikM%07*^S9h^mNF7Se=e8OxU6sj)4YF4GCxmnj{036Q!ytVcRxlQX5+Nn= zRXmV>73W{Z`4^h%Gbm85ejB`h`zDT&&{K=9e8pFC5AWW=ROb8RxO=GU(HWBXA}&vE z6bLZu;m0Hl-+N~1cV^1tz>nGid-}A&QKI|+dGP|ef)|K~@nSQqVEhuPM@UJF z{Q@t3j`N?i7h8~vYX$ejOL_5Ik{3Uly2Vds%HzdvL0@G0%2@S;dN8wP;$e6&^EYi(@~p!y$ZDbr z{_z)N+Xesn3u@T~842AKWb8&)qIv>t&5gH_f6J>SkiQ4{@DcGaK7I@<7=MI-e552^ zvxAQ{53Q;%Txw99B*6EDg+>Sgav`ej9g8L_*3l@0-|_ zjC(I4o~lxEOXf9m%9hMZ6)mJdt+=^NwWrMoXc_^{@j!zx1ez0Ry+^qYV+qhSNpNO! zIZ5?WngBD+Whos$n@9)Mtpqd967uXo-E8(KElqfpHigoYp%h^VrKeVAmP6^O_*GRX zZI<9=w$jsBnX~nJp4B#UwqY|n&Q!iJX!3@t-3o2;p6U(k0%QDCebo$Y|GxUFAgR7m znOxu9%O49cv{EF(5MbI=%9SG9SnPO!X`bN6* za#Yp#XUBDYKLNXae|E9)kh}%Jv;!D~A;6qX%V$<*o^7!c0p^4RZ)t-$hqVkOz)lFv zj@#A!1X5H77}dO=fL-684KS*{pFoQGCYX}|=3Ib57y?WM7NOx!D)KaEzNKWV^W!y|3o1HPbN=0g(OgiG z*_>x5c&cwFSdNjS2d)T1jNBy{xic_wrziMn_Q+kTMy~b2NA7evJV5~1Y5!s5RC7T9 z?B>Fa+#%Hk2{%!DZY;1vstXcsHs=|+*1nND6C>9hBZn}=$X%%xXuT4@6^-$0V-Ma{ z>V&jI!gtHD<-+suCXW2~F}>ABCta%QSxM)vZJhB_XPV~brpjnAlFB^ilV|DkN%Kxq z`xIT#U?eriR98ecsm#+=dv8~svJSe;zFKYv)K>#F!VswYR%Z6We!njkssZY=ZPfkP z*%Fis!_IIeSGRL$2dA8{GhC0WXUPlTb0Mrhgdq$e?7GU#fe>~b)~SK8jtPFAt!m&dUO;Arcit;I*B`^qn^{pks6*Fn!_b=<*r7|uu=8eC*xb$sx540sFa)<@ zm6_Lr+c1k=1a225cx8fLV51w(EP(OcJikzqay@31zKrVnKKf0pQ-WRKD^047)j^&1 z|HaMuLmE^U7G3LR(LFQ!j{Qh>iSEgmfPP_SPh*^(4q_0{(yq$Hg@aYTgcn70B&hgbrXP#`XC0?#pQm~@{L;7UH9fr z;Dh$&;y#E$P;c}mF6-e#-d%$hU3E+&ucB9SSx+DKgBi$2)uIPAB)ZVwc&n=u;xd`; zsnhZy)vy(H44`XbKQ@MWh}}%^hZ+5_%juioeG>c{dzVv1pJ!lKq#RjJ7sY)O=1t{3 zp42t!4n}8rnT~Y~O~pm-#b1ANl^#oD_lS5H-Sqqy#`04Rgp|ZWM$kPl!3Sv3^sHE& zLJUqiuA8rhvjK8{NLztp6<`Y+{T?D2dgXz_j?i0Y zY=|Uecx&evo~XC(^+R6yXm~^d3uU>Rj2KQ^mmG|tvOUB4Q0>t}V|GJAjG!jmc}Uw{ zBb90Ym3>q*j$ZOqE7-nA#he5H|%mBr{c! zkbQU@q9?d&YZ&F<8pKFyF1c^>#-F&ssACL)S;sR2NBL&pFq(n%_!wI|;$dds6R?6Y zJ!YjDNJ)#`f*E*of{)fS@JZyV3&X0U3&YX=4V>NV-*`!H^QmlHh%%#0;huU{sOxBO$8JD1-0#h+x-RkcELoa zpfa;W+=au;gcWq79DmF2ghx%m0AUCQ$KqQQFgO(G1bFh3K-BGafBfloJ4oS z>C+Q79So+~PM^#kOn6Uc*fg7hbFHW{+|$P_yNYrCuBy$PgipE`3DI0ft%Q|RNw4=4> zV=A5QJn%H-TH5|3yX@*r?XqiS>P%|fZA!cB=Gcv=a505Rf`6>gSP15wAjaK5jb@MCxjt5 zb*ap}44k@HY$-TBmf%ZlPM5RC6AIPx1a4C6m!_V=p+`LCxrQ}g3SOSjuaL=qc4JTIW(@wS8JGVdo4JBLnP5wN11na@W1u>5 zTdB)kwc-h*e3dSDd-d3_*5$5D)1H>Pc*=WA#&caLo}|9SO8ToVm*igGymU0H$Q`8T z4d|Bmo`2@AukOrFDvDX`m0~gRUK5zd_r3{CnQ#-*fP91pGr7!aw&rtxfRn z1>3pN>?M2OwmE?>3-xpqG#y{?O1k`N_zSZVhMfaxJD>mC# zlh|%M7~5Bq*jCXEY{hqnpD)`Qu=Szq0K_WOWhc2SbMH22o4Yj?<)B7Aly~?jzf6?x zR(Bl`4?}q}tYAC|0a2!;#a;*H*EC{UCrB}QGl|J-(tYVCPp)5Pc_1n&H&;7Eh zcaeaUsaw&=blX#aR8{wQncSwGlcdZ&MtZw-+cJA_Ym*qy5WMLdf;VUg?60U04>JVx z`4NoielQIIB`x+2hT!c4e@l5}(-BqU{rKH8a#E^cG;GgSJr4NPJ*Y>e+U&8<4$>*Na-Y?9Q z=age#@?nuaJyKiG{-pWxdC+0;>!8D;%5*1^+`%hzclczczoyzJ2Q}&ezTXG@D+0a_ z+5sH#Fu>^(85q-dKm?qU7W*E+zf16M6Z{*^d;<#Dfdu=;=dhjOI-4bDiug{RkkCC> zcdF6D>FSR7)7zxcm#_8b(7GDVpOS`CIpXRTKayf~ zyEcWB?%-vqK9ikK&XE^-;s7-+huq(`(XU&})4b7b68@~D4wEv}eMHav`N=nbexUjD zB4A=fg{PO<$ti25#gV)2A_8=YktHpiP|<=J?vyNWFl zSfWohze2_K+u~|P#BFqRR@Jd0;>LIdZh}T3BpH$56(>m!Xr?@YbPTINeBb{&9G~XbdlTm#f_B!|@CKXR; zza!q6{@Bg9l$W9H@+pLON;vVfCx_@K5YYZb?%3G_5I?<`Pb=nAwRqaoi>ax^(*YRY z2~KGLHpF8^x2m^E{Pbe1ui2TF4xMJWp&GH#)5>oT5_&pjKt1AN(9=E@#`K(%)Ke16 zu|oaKVm_moKcv;ucb4LzRO;#E9A7d{X#cK_{#{Z((@{UeP_G(s!PA$U<&O~fN5V;` z&le$?cCaL!lDPW~>9dRZtYZGCmi`Er>`B$A0z3Hg_HgU3?cb-l8lg& z7JCBHR}}N*#r*MNzO0xp)egLgVzD%p1C8JSzPg>z{v&%KSp7J4mzlAL=ooOAEN5Kg^IP9dbE#RQyNSIpNI^EJi%sbapm zn6E14E47RCwWe5^%Ec16_#L_Ux$WZTx~gr&A8$}LEGgUN&LpN#lM4vOV6P%hiH937HQmp*J{jjjnVd>ni!|44s64tA7Z%gM*{Katyb!sZ|1ZRk&VPGhx9Ai^|{ z2if#X?$5zT1afC;C$X+q3D)&0;fqW7q7wU@hjx8zS&6za|9FZ23S~)&@d=+;Y^FR{ zD36!;pZUm-!P)W>EZS?l@n)Vqt3Fp8qR&Ms`&?0CfAMO6xWBB#n9CKOkHv+zOkN2) zZ@g{-0;T22lEB52o+$CHsVA0~U;{EAba>l0pN2i*Q|Te^o+`oS^Hexh`;;mHRqIOl zT0_+{e(++QsYI+bQyyr~_;fu@x}FZFYroREb`MlpsGPb5IqbBXa-i8bWbdaSZ1toC?&=h9?P5JVs_U`K) zydS~R`gltlTHP0z8Hq$GZ!7+&-!dkmsR~>bv>39 zj=GCUU0>77D3N|+;u>iz|7KOsa@y{Uwk^?* z3cZhki(3sTm0zq}LcRC5d(ZZ)zNqZz=2S&>B}jj^Rdp$~>upi=r(WW%hL)GaL8bl^8@VZ%Ze43mV2{{A zUPn}m*Bu&^XG1;64&gd)`<}iBCxhzd^`7p-%ufhgz8V06)ZJT6J@Ztfsi*%Hs3L#4 zqz6T6HXT}Oe`VB@(pgQ1l;Q?nFIsb?SGc|F)v$+zs}RuMm68@4j=k%!QhvSOonC`n zc73V7t@sNTpP^r&X*)clC@Gr_^VKVCVAr9+SEhCyI)tcPN;WrjSW+^HnI%M ztb5MMhL;(KThBH#vMlwEXOy>0xSf}vbNx1^e(6f~pxsG2YBwNvZ?@g73U+r)lDosw zarc%acSodj_ZF{99u#A|Wy09x zw5g3ZD~a1Ysd4UBByM%%9uM!(9@=wAewR6s+-#)WL_Ca}O_ZDWz|FhM_+4fEPVHa` zO2nPcY@z|xN5M(KlkvW!$>^HX4kT&Y6L*>Zd;Gl5>!(l1K{ljG$up~|*AulHFj{oq z*THW=sCz7OJvom$akocnRxVD7=r~x4#>?-eUERIm$R7(s*mDH5AEzX~i@`WdE8|nk z_>?k!e;J>wN8>mYvwO?-|ARcmNXHR2x&I+EL zk0#Ad*F1Q3&M+PJz9AtLRN}io3dp+qZHx$FQRI}5gPR#UZb!KNPG+zD) zjl(11#^E#=g8!)qXdEbMu>}~1`DJ`w8J}Cm=ali;dNfW)F-FOlopVh+YIZJ4nw|5_ zN*=(Ae1K>B=GPfX9nLe`5}uaD9G~@>ur6OnR2GJ#(hi28(G~$wp(Nh*2bIUl_>wZd zSo3I)0`_>BcX#rbN8u7P<=jF&3x;B`Gp*fuX=J(+LOfoEy-=1Ns9zLYM#q84VAt0z5HD-0{=;=MvCy#RrDiWtbl;A(Qc5_xbP@i4Ais=xq>PyLTLz!4liq!`a&z89t)ASygzI3{bs%{J_WY3um zKx*y2P=+!c#4|8Ggen z$nZsN==PXxcbVF<2U&vBCK4i#vh3M1@uHK0%RQ;eMl+MBykJ(jimJR+Cfor@rgAma z*<8kipNc;tOT6Tv(whvoXhYW(yCpZnZ+HzEZqG%RXcYDq9>UiON5Oh&N z&~=4nS=;~{5D;~dASyX2Dmkej2!b$Tz=VQ;f+C;-f(V!a0Tm4Ysp{@K-P2X&R=k-P=3kQV!Jz(#lU!`M(*m}{E)u(8PJJ8U-4aMM4}z*& zc-7{XQ^DdpE8+#)B4*X@zPayYI5lKYmMC<8DfeSe70!Nze<{hR`UiRrG{M^}6O_CR zdlUG&QgdEOeEX*fibsmAjm~^d;xVr&8yH(T-=0SHdgKb;5$z;-$x;*@LGdQ1 zSj8z;*%aGA(Xy$9wrgsgRNH-qipb8Vc;juyKjM*)XuB3x;xf1GcAzxb!W!Ost%;Wk z^sv?yp@zxJD6C6Unmnb=Ql-wtmQ`lUmKNOX1R=EI@000g2T%)@_j8SS=O1(8S3+xB zE78W)`V~r(ZJ;c$my~RaQhsSDh4L>xt>d{IV|q$?$8<^^-DAv_S8?56gB-f?_sQr! zgj%S4kn6=e|CkfM7P_yo5?8yr52G}BH53LfXqm}4jC2p`1?X5&RD{;LOOT+jD z_4!u~TUE8^o%sgdXX1HQ{4R@2u;#T{5y68D@fzPz3xjAdzAkqbE^G1)N_-jhib_1a zr_ESlGB&~o2p)NE#yeZ~_&6Ju?czCBydxhZPe%BV6F(Y$g_(i13;w?3!5U$sZQJXi zGZx=f&;HWmja*5Nu*Il3n3?Q|zn4W$Ud;Kv;Nso6ie*r7(otQ|DU2{K5$Zj<5$}aQ z7s=~|hnt5R%Odd}|8IAV{G{!9qkyv_+0H|s|No}XZg~@*eQr9b-gGH`4Hm6*X->Qf zSDkxXi9##U%SseD{pfGW0)8KG>UhSVfSK&Y%k0;TWTE&VUNb@&{x5&@w!C|yA^Ula zMdlxemp09)QZiiE0g6SNB5>) zGg56|59xI(xb;$CBY@TXtv|pQgwy){k!=2O2E3m{vaiFVm67c0a^fSA?E9_6eO6+S zlj-Y|_j9@aZeW*r#EUD$zAWA6m6sgk{nQRUS)3tOL2Wyz#rsL9?bv~JfZC3DbPv=% zWF>}MiD6b^sFfJvXuc^YIniKJ2aM##9p2B1TZa6kepBBk`p(1c=n=_@VlJ4(U)^28JJ2EQa%WRJ7eAvm z(#jr%PJ~A*Cq*AiJ|e25dem8b`gl|nR-?YhpA&#ScoKuFCw|Hny{9MkzA?C_Sc%82 z#AD8|Du_QN@2S1wQ{@1D+;*n73(v5!r&&&s(}ibP$(f=HKb9J?W{c^(3-^xCvXYOB zF=^YR^%A=JeRq6zz>s$?n=-v~QMF>knioA}=NVk~nGaV@`Yq#Jy}KR=LU^M``>uEB>+=OPM&m zb#`{`g4Et5Z3*&c;Ko>2h|-unDTOLR^AeKM`jZ)Zeh|J{xE;>%I*Scx@O;%zJOmfHu!ZH{X& z86L?@z9Zf+8``Tsu>u4Qzke~l&Pu)|rc42=X3Q$_4BGds#ev`WUnnZTFLjtto=5BHCt@p^R>A5G5&!oz_w5-;P))z5g+#9A=RbVr4^X} z_|W=utA;H$xmKQzXLF?rOju=qXo+t?ir@Z3vOchzG?f5;XMEC0w20A7FMrZ(ry8BA zx7=)HZvshB)q82$&;Q33SCyxOr&~2_@sVqlk{Y+IQU&M3Dtn8q{dwNdXuN>-C0x7R zJM8Sc+WGyPoob?q#Eq7j*&kUvlI+cv_!-{yR`v#aZs&K{w_MBjGS;44Pv$p5f}Y=L z$$J9-m=pgLyL_KmiS1Tmo0ZsVB|dgLv$&r&Fh7U;(#rnA%Kp+y?h!+4AAgOu z*eiw>zsoYdKW(|<^J*WG5By2MA7gHqZQ34ELsP5(B-7}D^eGmBV~fuIxys~zo`>Xa z{(63kZ|$zhZ`;gqkR3Miy^XxfBiLctn46%ryl|%zvDX8T8f< z32%XPVik!eP>3FT0FuRl`44em&i>6Fa{SIl9Fk#jGQ;Z!)IzuY9&dbj@sD^YEKV&l z5{Ymk5lSRjB4H$)E7S)$oMZ{U$(an{Z8olU@?YbQv^XUpR!oOsfe0$9_{y!7xX5cH zM0;ORnTaQ};6V>|b=2E}3t0R$#pGTX7T0`#1cR6XkMTb;vQJ5fAEW;XpW^p6wl8(v zj{Y65nE=g^%y_2#o)iv62en-RooRm${%6$9NoI0E$(sDNVT-!9?q38FMo338ThvSB zB<(+WDE8(ll5?EvsF7VS(TVRCI77U80>}xD@X7i&{zpc3T}aJ|*Gf2%2^PF~_k-P; z)y|^d!l`BpP1W>=tU2!#s!74@%Mi@ zy1VnW(O9%S-p24Q;C#%9PpEyBGo1NmM$6L@;63esz&p>+8{@pO{{ipNQ+#?a;k=jp z4|sdl_3^ghylwsmyovfg-W<-G^FQG2Z25S*bKdSQZ~HKNr&dFQu`HGqsu6m(R&Iwr z6@{fG`!=ZLGiaoQNT`p!fOhwa4(A0oe2(o9hr*vLt$i2?gd3}Mr zE`gc9H7E_w15!+{ivcOquneFi4a-riOv9Tb==FeCO2cZM*SF+e-`08kh`erwnIa9F z04dV&0U%`>wg8l*;bRml)3BEW?Fo3LH0;)S{Zj6ApU&$M@_HC%iZmPoBuztBh=q>I zy<f4cBoG|Ex|rwG%6+&HyM$V>J{j(|8(D*N2%Rpn3tX%pPyt>*;c@XXw0|7@Q=hM+ZcfzAV5SJ@qJURVK$pn9UaIrjn!H{fp!NiGg`B#Lj=Bp`-|9E>t^IBR z<_{JT*>m*GfTZ1#u}**#qY@MD9pt&2#&cIS{cT$M9z=hahCUCNBCtEvo^!RH3(0eV z#&b_KeZH2ygy@Sj^mhYO1lC*SSuByth`x`8zEsO`4{=m#I4XcCB$jLG?xmmvM<2z3M6_`I*L}ZWUa{x(OkFf@TuBhzUGrz1&X=Mq{ z8A9&P$9ZB8<7~n`dl(JH9tI0V0H$~Hst7q?FwRpiXvU!UM9A?aN8qzhS4+_Ag)o zZDG;Q|0MdftX4ACk}!|!zStNO2hH~6`g)D)>wqa5`dUB%RrWdOHRL%>Rh8X4uO{51 z%mMgoN zaGA0^QkDxlRbuV{rcib}AceASTF(XKIbY+shnl{-mcE4Oi!}6itLb|ay*#glgv;_; zN$$%v?#qBF^4b@WBCmbOvs_sz;Q?hV)DNI)lnf%#17W4=3bxU zKZiWe(s-V!ric1xh+{tN{0gxIwAW(uR1}QO1!OM)0xioz&jL&rkA2+*DE4$R|Gw@j z5|o6QLeNS;(gtU21t8s; z$m=I+uiMG1d{}NHT#}0&042HDiDG3gekWDG!c5V4Cjj}=ghju-b~+A7*Lc4WE)o0( zK#5@E6pi4zr?{snSupdfqQ1YZbHBDfKXm4YuL!GD99UlpbCQt~SAjh7HEQPl#VMAbh~tWs5qup$iQwx|tQ3433GNItzbZ=Ot>jgn##;!NsOkz(qN*E;m8yzJ zRd1Ln(pU({FPPHU3y?021%yik7Xy?CEosUYPk+A&vIQ<3RG7mPVXB4j{~< z$Ub>wq5AXdKKGDI5#PFP2g`29WYBd^A8^en%1RiN-zQoCr`7%_I~n zqnS(5%!Zj?GIi5gfRvJF0@O*KLAXTnJb)6(^HHpnyow|zVWwz+m4N)wI1Rv;kuS@= zzM}KGj=a7bpmq|)so#@Ruh&t3Le$$}rU+jBq-)L^Tlfd^NU5lu}=k}fE1~S08*#oQu5qf z=Vofp7s)*H6{XnhYe}A4Xgpsgqqh$gf0xm7NYJ+;`u}L?{|!u$(tpW3+w0+f$~;qG zSCQwo8qaOi^jB!Ni{(~iE*CTV-ZJp-Krzm1f2hMlLg`+D)M zz!b`E0i@`~H4E&^I9(VTA}kgguD)hnZFU>)t*YK04W;b0YHJN#BP2T8VXR7hG8gHreOjJ z8W-?NX&9^XI#KR*lFsW~@;V!4iZsjuq)5X|Kz17BeQ^fifxgH>^8iZHG#|yvG`&cI zm%+@hiqiA~d6lbLO1MPT3V;$-D^aXe^)9Je12aV$-v;Ct%-mgtw*cwV_$J{J!D|6Z z1g}G}Qt);XycK4CRg}h$$*Vk#TL_n^`UIdv)u$*{s`|8^yVluW&u8YFHMartrx4@?o*cWTeyYCRt#&qp+#@w0BK4slpZe}d?L(a`@4OcB^m zD$im`_6O1brlJ2;%aKvv9W9~y>e0f0DI^+zq@zVh%q05i8v1Hljx6G+t>LHzOd+wR zmcBmG*VWLUqUAV~I8G19z)Wb*E2pU_7&{e^^7~4E0VtUS&qA?s5{#3e^8;QX$ezt& zIDl!hXm*FJKueRW z_|1H4zumz6!6G7ij{Y2wv^z4k3y@-R!rJdE^1NT;d7qm8OD+8mME{+J{##&*z`jv? z{#xt#2zfrN@q9>4e^5*R3(^0ip+5#p5!g|cXR-eHjp$Ek=#OhTLZ`Y*B;!=yBSu}iX}_6oN|_JLA1orW$MQTt($>RQ zl>q6sf#wkI*>L%n*yhJ~mH?)Aa`$WFOGxx$Sb6%qPxK;S3T4lcXZcppLc#;eaD-h! z?w4!aFH^gJf#~J#ml7Uu&q6B!suJ@mDSH`Ks>G}UrfAKV04Z{o1QggJwp$B1d5b*1 zq4E5>ntrvGem&8z)6lO4rU>j^wdZ%pv%EFd5H4wr4FFZG@ga%c1S?f*d;m<5^7qNJ zT-ip#1IqX&Ai3YEalZqYB4?igQYibBJj<1RLU=$K3+)D|%GrJr{UxkaIok_Nq3jFt zELXON@PIPp><4oHoyPsQz!W+A29QG8*MO8?(D(|VZmv8)ctAD_9R#RK=uZ^UQCO)G zdIXq4_K$#+vJV5)$v#AQKsK^n?KF2i8$L~~Ed)%VjR8_>GXUze{h`%XpS0E0XgdX% zq9M;~6Rm~?=b77`P;~YSK!IZ|?fOKh`MYu%p(*Pxc zpFy!w@JbT=BFy}%D2>a>t2~X%2$!fz0+gtF3B^iPYf05RFjJ^nLtf>o-X>h4Y8^m{ zs`pT=RJE5>?SYx1ad!jq3#P{X9FVSYcM&cT{3Sq%;C(1o3O-7Le}tJ|6*cZ*@+wc` zA;Kl9jscXY`U%BKRhg%|i@@rqE7MpFkY6yRF$0it4HyQf%W;TsNi;P9N}{QSVr4W9 zD4Mfi=9f%4{tF$RCZ<0DLujvD|BO zo!86B>%RlkPNFz-#*9d!qyZVxj>Kr;hp_ zqOSCt`S!aifcb+(ME1I`9FVm27%Ky0cQ;RW;s- zrQr>o*EMpl@94a4C9hjxrbxp_fD~!?5RmSWu$l0{7-peu03~VKj$&n+4v^q|F!QUT zG<`{4AeeCyeU+2Ay zzlXv#%I(iJD#UvhW2_LgIi;0l-Scw_2jVHmX^#QwMX*O{C-HUF0zhr^%PR^?^7s>( zrPX`-Z9E(|io;P>I4dKoS{9@i!Sc%feadqC<2t&ii1>On)$GGII~Xo~Z21^aJ!~nW^;KcsSBCb1y74nPK5U ze`au>&Hy=?LVbENEN@740^G(q2_si;IMci5DPsafbJY|wvBi? z!2cofZ-Pm1l?*o@0I-woC3crAzYxJsuxp!NR9IYCkzeL9<@Yt<);7*kQC3(|;DPMB zG$G@6VmYB;v2Rs6E@Pp`9!)vZod71E$x}0wkC+f18QvGkLP@|s)to^!r}CPmB^70* z=zaohV-T8{a|F(=@CwzlRXs=0vMRo(@m0q4(ZDTe*U4SmR86z%vRfItQ=b=z?Z z5p0HCn_j7YB`yOqwn=$p}6IGx?M0d%Gsx$>dI$v~He8!&ojazBsKI z=Ku{ty&H_EUeBm9Mi^CPpbN7?;_7L0`Ta4LZ*%#J#reeGbKPJbI9CKyP0SThqm_V% z5&WQlM{qdPh#IX0{4l}8W$;LXAMuhihkPu-qrA15Lq3t3>VJILUh3C@whT?oEa2H#F_R~ei~aIOr_C%C%|?oDtnz}~nSE09$v zr3%G%1)7#C#4kY<$tqP)rLusRzOoAasX{-yg6FteDXTDuDh!mtRRrHJgNG43#CAtP z;Wue?#92n~CYBH48n2l55=(j9VN^M-lO(HnC^qJQ5&9g>h72j0~Pc z@B|q=h2Y0z@Kl1Il)*Czo-Tvu6FgVIsX;Bqz;gsIkikm{em)ImY%xl@@Wk0Ow>{w{ zsltl13c}rM1ivDK-z4~T8T=l>YXRpJ7L<70;|WSAyrHuAE-anWRDD1dH_CWFB6zb5 z{*2&HWbj^s_sHOH2>wb2A1C-{z}|c^_LHoF5pn0x-$jMg3d0UBW z(m6e2SyZ8Rph7KKh0~})eNn-?rmiQea4uCiM+Qd;ZYYDB5!}>vM`ORW82gDpC2abl z%s=*0m1n)c&dQI z;TaKr-ptR3pM+Wayt2Fb*@b&9jPsKxP~6eKU`7_RLiU*{f}Bl`X2R5eGF-`bz2~^Z zJzUT}NvcHU`HqYQLPogyLXtC=*UB$0EgRrns|(jG^t4MUv^sR|xpEdxi9ua6>JEk) zQR6P(5~q69$nzA4=_iZKYp0vnl9<;c^HZWm&vddg2t6%o6zBE#;J7OdMTI54qWTh! zvxwtN33@J}=R^%W#MpBfY5;RAi9ID}qXesADiHyj#1M%ZJv=C54Fe44$r#Fsp>Nbc zGr9a#qp`APtWVVN1TG4Bcc_RO{fspus*A(yV57>Y8V7SUSbw7H2b1Q)h95u3hOtTj z7Y6|m&mgKkP*r_^ruty2{(!3b{hI2-sQM6CDI`8ZMkAs|c_3jAscVj*nxj3M)l6SCG+iwb9FD^pbB9a0XyfrEaB0-5bQYTJ88<7=^Iw zx;ZL#UBe%WcYYLEBNOtrO2}I(AuO~OlTxXe*zD=O6$`D88l}bg1!C%U3Y|G0TdAzt zM%2hJDaB9E@g+R}ExT6e5Zfr8kAq!?u`McTAE~8n4@&ziC=I@MlkZ(oqbT1q=Q}O5 z6HXKz;A^UTAbon?uhP6vr5Rcd5#JB0>fdXsAEW9=RMmgfRR5K#A4fFe2M5!R7Qd)y zf7Z~3O!pXXm}$qbKcWUUWL+oN*Z4jCu>PB`KVZ)W*9lCcShNSrsE6YYHi_og$EF(O zsG2EjGR898s$p+cab!A=D*x5=9;=;BaE@tU8RIH-3LBW-HH%YtwrOD7)Mv?6H-zn7 ze%bT6>;|C=%;D~C7cU93^GS+n8ojU$=_6w-iqd-mr4bXk&uIp(p0Oq-)@^}uk>lo6xtVE{R`kLuHekruMU*LOCC)4u z{!R>+Dw_BbW$gx`f2QZ5CDFA|M01%cng*d(>1>x1+rJg!{-qQbW^Jf;YmL>lWOcR1 zsy$gy9=|5efr>9SIa|@&vRDwtQwf$dsD;oQslBgk;|T{T!OWfSc?@M zuSiq7f@+s3YWG#u#&h}+XlYsl^~W^tPu@V&KJ{?(6S~K=Pdlh!fZ*}hssxX>=`oX4 zrH{D>Nc?>Y@q<+2k+?^w_6XiDQgbQ}MGx@?_mvD!KYR`2Q!dTUs52D4d<8>zYo;vt zf#6Z_ifNB!oMj)rmhj_1m`xxt;{syFrn?@K?rC&D?x=KiBZFcl%EdGYO+lj1!g(K# zu3TQ2Jx1y#xpl(c0C;GRW7w4R%k7cxT@s?zrlpfjC9)?$=AK1*(t#}v0Pb0&2M|Yr zSyX+7^hm|nbcIHwc|KL1tLQOvRFxZqR;KsAg~ax(yq_`ljDil|C*p_q+_bqPw8Uv9 z8XL>`@jhVo9GW-3gkNXo$56f)gjtqXQeKo-k?$PVJ(9#aH~637<9+L%uF9?`9p(P6LpPol+%klNkmba$J` z-TR8p0+HMOwHk!Br59}V7lhfz#QPB+nkBU0@{B0PKEz_I((OoTgBpH6_p>$#?Mg4$ z=`RSg9pv{@jo(l7e)p!cenG6e3-;oLDEvj9z)=y$Z3j>DkSm6f;Wi>K$-3QA0VE zD4J|U-^qM@8clryB1)8&-YG?a6Ra<<0mS+aUs>Uh4~@jMOX5~5tJXval?cEl4T z(T>l>+|yRy$rxh`OGm{F0N-@nkmhrS%zf+IUr|VYIUw0i+$s(0DHpgqB6TjnsYChQzV2W90;4;Qp#`O7h50y! zc?L$U3ygxY(#k%bLcZ*(dx6ojut1@5 zd>4R)7B<2rUJ+)4z`V#piyGOxC+?ad%$Ada7aB=6)R#7r?bV2N-b++-C5+rD_8(p&lS~x8b}UDO3o+ci!Tj-S=+n>(Kl}J}Z-D z-rd+J2@1o2>qpH}!P7RJZ^(IuBxB_~Yw5+JMf)^yTePH!(Y>^!91H3~{_CgItawZ( z8lQ#wHsKufO;*uWLS;?3KVKpA^e57OO?bodF`L!^l>j7zh_MQX(Yfo#?vdq=Z%-kY zG@uDaVlL0OWLCHjU~@SLi6cnj@Fq@H(-aOo$X)_jaeCn+jVR7EvG71elIRO1v;O(g+ODx!KqA#92|s(C~@M^SmUDymtk zsAkHdnxTklAqjX^(OI5RMEkTNDi(SUHM)x{KdHmkGV-%j;b(~|(C1ZwE|vwlNERpy zEys|_E2{LK#^Yq{y(VAbITo&I#Z#qIo}Ftxl-?Xv-K_!qG2n;7|JWu;|T z6z2IiD^RbgjxELwG~ zSVml?(udktQSG)+6`VgAYhxKDr9HgC*@r${*T#i{yA-Xz>Gm zYTKEyUMTUe$O;g?$HZQL5PeC2p*W2}ROn9?`T_RP;afnwyGgWF@V+T2FHhHl6@@Rx zv>ncSk@5VJf(mhYG&O5ik)r$472T&$G)SsQ#P=}R_@%IsRvmtWT6mOI8{H!u9&O=X z2fR5B%a|ypiPXkY#(2oG7l{63XH4R$^GxX( zV_|8p7=4!LqECtj2#2RRDVy%3Y=%e~-*B4ZNfqO%dR&!_$K=`ItIesF(I>yGusC0w z_NHP8J;kT2eD8?>zkhFLF#6f5U}q^~d)kR@ffL(8C${G(wt1>h=Bh(^MzonXy`g78 zBV9@JSQZ6id0rLE61XiZEf+@@x07TnRtESIjh>a3(JQ~OpqKxEwZby)DePg7IlJGY z`Cd%#n&<_u64A?ij_&V_c;6QVR;AZtq19fmuHMjV9I`48Z=r(UYYmY z%m&^LG&BwcZ^^p_@5t{V3%GbJIcHi21lN!Q2=4>$2m8PW@F6j-CQewzNo!V3w9IG7 z44=}za5A&k$;_9|l=h92k#C*%@9g)?@9p>S58|C?<`W$FOFdt8L08zWm}0j{r&z|e z%98bQFj@Gu265WE8xUU;ce4FbXV{6^KW!;Cyzk|qrBibx zzx@}<-iJW*3jO!}vW)$X7SF)Ny~0kSvue5f1YcQ3Zf>Xc9dmOfjU(jbMtf!o+(!27k)hNS&>VJKf7@&SdHW8>-MD#Y8h7J1R~|rQ@|eis-CdB z_$djo!FzU!zJDiZM+|HydS!!KGb2g#8o20s9kc#8S{S2SblukmMfk<{^fz(ScAdL zFpM@WyWL!#Usm4jro!%6f0uS^TY67PQE6U}@@{Q<74|8vEV(;zS<_}sFYZ=c-miPN ze%&v=q+53f=yq#i$tBIZ-IQOHpI4qw#ZCKQ!|yDk#u*n@MaD;lMn*@ziF_A17&#mn z6CD?w6`d2E8=W6r99B0AapHG0JSJvt@! zsQH>X+FWRkHRs13Ge^gsFvrKHnKR9~=FHej<{I;R^RRi;{Mr1){M8&58ylMyn;UyN zwjj1Jwj#DN_Gav@*oN4~*w)y#*v{Cl*uL2Q*rC|r*wI+kQAEGdoDq57Ohz`F6C=wa zADSPTu}QH-kuB!z%*m0LBL_3*MCL>*#zebVy`y zWP>>`GBt82b69LzWP0S`*sRDV^V!Ji%!QH1Voyh=$DWT&i7k!17+Dc{G7_E=*&H$F z#$JuAimZve5m_C1E3z&!I=V5kKJrBL5wrEE=pu7c^jULU^vCG<=q@wzWOQ2evFK8B zN;Dar8l4cG5q-&=8C`D9iasNfxFEVbx+waBNaiciRnZmE=gs5M+2#x8VESp^BZ%Ax!wHK{Lb7K8K9MwE1Xsq4|)RG}lIXOMM*O72~b- zhPffOFYxf~=$o;}%1!4@EzX z42_M9omq7NtNFUEx|bIBXuVIx@xnQZ!jT?P`FZM3R7BK3D-;B+ShY$yay+PL>!CuA)?<(R|9)rYz3e5l zw0QY{eopefJMS~k%sg{{W}ateE?U|b>mRyy&H`7aSy)rOsH&=Z(UL`(@GAAWaM4xO z(tiCMO>@LGEqd`AdnO*$G~>B_K-2O)`W{U?+2=E$>v*1>hcxZ=o?m@l)BX&P53y)~C?9Z;xYqRXncb99k?9cO{$^QKEPHk59^S^g%vuuxZ?kBWkK8rrDIbZMb z7HLlVvm&NB?a%e)n$vg&{hISH^E5Q{`rN%$5qEP-z}p`7``ir`z9u}uhT4Xj>cNI8 z{90cXzUGDskH@Vw^tO-3hsQ=II^tuoz8j+MhJ^^KcVw);Z=`o3J}^AiJ02SzjSu#Y zNj$f^&RwVVz8(r(W6{15cU9HGD!Vb@)q}NFix<@l3@jR4*jG2$Z@~xc=v4-M?O+ak za$;1GHKO(Qk55jFL}TNYtse=B%g=aB>z$Ce1axeOM#mTWJtIh=?Yn7oSl}z?w&(^; z<*2vS9cXNB^S8Byn5Eu{cwc9 z*xgWrzeV=&%wEF^qcCUM4ystkh z(~FF|F*?B7sjtaEtVPPYjg+vfk4YgEY`PCWc5(rc(ikTpf4T`CPrliBvGD$fymfIoEhTl8yQ*K z*MFlb8MwvP4kIZY(Rgrp1Qyf5C|rg)VL}nzj6t;`! zK*8ad>>5OE=!o91KAIhY9himAyq46cDp%Lyk2Lu`-hdl@%=+j=Lq)K47_YXBHsNb? zhe8pr$J2&>dC~a9V8f!JvGvi0MFY`^8{=c+=m~~~$JZxDZ)~Vr+)#s#Vv$)j1Accf z+#2>Zwza!g#D>}Q;$sc9$eiJKp*Ht5)DHDc3<21;b_CyaW94M#qi$xH>~Ay2LI}a? z5}Eykn4O{lV7JIV)c9U5XfRrzH|X~JJ&{%)2A}?M@7Tb`CX6cVEjbje#W#M9VMle5 z@X``$YmcC{vvW1PEg!of5q&*h?TsN{q`472Og>++v9WkgTt1Jxy}8{VYHe#eM!)16 zTR%QFifWP5IW@aOzLqBR67B9AVq=MM(K(^0*$cLHwzl#+gw6_2t&x_F5sWy)qh@*f z!tT~qZ@}Ax?%j-Oxun?2C3deWU=zs<0vX(n`V?qs54&Ynacpnu8%5nvLj-fW7I{95 zDp}j#H##~Nx4Z}3ZSCQcgE(^vK1F4z z?X$dw+>Pz60k0?MJ)TGhqLxqQwx_k7!*`w`!OUBg1E#-#&)w7#YH4qapw$h5NJ&!0 zh-=Y{oHu=j0&Z`M&ld=x!g(_a0D&N&@dU;Zwo>7}p>`l)dX2b){$^iOa{vqjSq-+c zj6qkh7ifV9ccW2eY?1bFYp^F&)II}6d~^@ThZ zOq@t;tUo$2VP@il*%kQRP3@6Tds_f)jV+Y?Sga3SxlE2sSq8HdaEHRJ?cPv3#(mX! z9J3b)x3n}idV_xVT6Qji8*4E}gdkc8Bd?o$*hWHidlN z))3;(@{Z9BMcF8x+HA+Q8AJ-gj3jih?fA&H4UbNUtV0JW>jGv%Ml#Hn zhmr|~+Q6-cBiWusl?MTqZ{~;P6J1kdd&C6E6!Y4z6*?7_pHSjuDp6Hg_Zt zZj402*-_fUvEnuTfv;}#MMABiFq zi@RqmL577iTQiq|0g*>yibEPKpXf(CExsmCTiYA=+0q<}_#+|jv3+I~D7uq2k3Sqn zOV5`_wo0f{Yf&3;hrK>udpPWQqj5I5TZ2BY*B|m7+b1co;%s&YoBW}6KdRp`^ET6G z*zIi#1cN@m$L+^(1P%dZGGMU~tPX;G;9!N?F=18uMz7l!Y;A9B4YlOUBgKQ%V%jA~ zxnYxD6h}*2Q>!N!QuIpRq@i|w-)I8d2D-RdR84Qk)~>S#@+J((&7NSu*WRQi!(-#o z7`RJt4vN8%QTsfK z1F%0j*q0cIi%H-FG9d&W1dAZ%*o-NqH)A{>7IvI_{nSvE#e!0S856yD4*d5X3`!Q#Xjah6=03C2fJ`j+H41zOB zkh5(y`?hAtwpEku_d>cHl&CES5o+;V3fLOseePvk=+k&sdhyN1hZ) zhir-%mdwIT7c4g%tA=$>M3LoOz2aoi7$>}qZm%a2@JIY$cF6jTi+}}>DW-H2f_KW{ zuE3sqgDrmF>(0)E*Q^yIZ=2iO7-;o-T0L$Nm1L4+cZRNEIM&a3v5Yp0>p}Yt`~87N zFIKoj*kaf=y^i~YXBn!!v14hku?c-=Bf6Bl9@P>;UZ2fv-WE)FTk=smA=e}Flj{SI zjI}W^$wsWAf4Ol4OMmv6D6+i~i%=Hrz7ezk#rj&v=Zkn-BR)G9J3|=uWcbW5Fi17} z+Jb(6n;PegKD>XZZ}bM_wT&BL@7#ykqtWw4qcwv|*48dr60KgmWN@JYud#P;uv_q) zC1fsaRA()^W%-8pjP#pJ8@4>bI$8VR;6zj``)0zI_YDjuM2oka}Ij3kQ>6djW7EQFIJ8M8LdxU~OZu^?hPxJSzZ;3cG`m zHapDd&1{h&6@k%#ajwY8{xH+6EjoO|(Au$BJ~vyuY-c{Q#a>A{zwNy?zs*jTA0~DD z$iFN|7i)=6WC%ejJ=XG}1d3tBM3T#~X7`1)kruDl6ZW@ay?~4SwPT#Hj}3w`5w$z3 z3uy)WA8d;>=kI;S$H>vhE+WTcb4$2A5X5STbf38~GZdd_ z3lVq~RVsUGiPed)C*<+^+c^CoT2~)r1y}?^_tC`hb%HXZ(Zu>LVbAWc!8Ll@+kKu; zQ^YM~OMbOTKRkduV;3ZzTJ;H6tcaP^px&C@37E-1Qvhtf2NNRDaRd7d&U5?6M*GD~ zfqWzuIRzIQi%xu81SnPnq$R+PO2Nz8 z+_LA;kWudV$Q~*faE|08Fv`Vq)m^L@Qx=oQveva4-HqrPyxv9#17~V-I(-w?)3(X&`xn(P1Rt=(h1~@&5)Uez!R)jF<|j56V;R` zWMptY=@-+F*@tLs%x&>)%n`)L`1r_1@W1_HYGFc}){iGfCQO)ZOdtyDoMOg}Kyz7n z12H3RV=$p38e&&;#1n@ktZzh&7)D@*OZQl81j0CsafXZ0^yr^6VWd zCt?;WERWbW_O`eKzEB|K343iaY9+1di>;Ll!x%Y5O8PO7+J|j$ z;LYB~h$k3q&l)&0hE2iHi$POSfeI@6VGhq`6UQiwHHS7|2m(kUra-J~g@7781jbJ( zwU#U!0OZ7t^}L|l8}j-hP3=L0(J_TMBBY7&X#en_kT;5eFzB*8gfQB}7A%;!0b8rJ zJLZA~{emFTx=EIrkExe8-`#`wmv&b zOTb1&=V*M0Dj;@{&@doC(PyNwgW4d??A**|Y=Kw?WHRZ`g64Wv&8uU0{rE^UJO;fX zD=-U|5t;=ygR?*?yyeJ~*v3|L8SzXCvmNXqXS*4}XTyy+`r?>)WQT79W`u2no8j7E zD$L06B!DNXsw9y%Ixw(?hsbI!|kmzYl4|U$~)F!Ij$M$Rqg;yXJFf8YA?=s*XR>~1i_w*&1_*x^Pjc9@Dtf@Cw! z8?xOgH+;KmW-N9W6_-_!Wr-vWy2>2?W&$0 zjCJ6X<)WJ$^8|qNS=*#MPO#(3^r%svOYX z_^ywIRg1+Akn88XRnxSKqnh^Ugr*JLu4#L8e1AsM4(-&m&;Lr(Zadwft?hScci!XB zD!${;23~Mzh3}Z9%@57e&e%FjdmuSWTl(Hv+9O|>rG0+aEN%IB@%{WP?ap7$((eA> zS=uM&IKynx1mR=TuuI+qZxk&4Vk}ZYx0kjm8m~Fg)`d=w6oOTnVS5Qb&4g&+8}>VG3^p!y$et} z@{jnZ;IBx$S%VD!7PjFo-JGaJPUP(@@h9tstRp8kCLEtGsrLlcvftQ%^OsQIdZSD2 ze?k4y6VxmVx=%nc)q8>x(-T%>JFz89ka^_>~1OVo1{j1GV}bCl&QWMTNF-w z%6D=Kv?sj2bmE$~CoWU_ThXL>Q)K~vt*vt>t^j?K%VHrPRNiS!MqXO9J!KQ&V-^5<>Le zBktTyQZpUUF{A#d2q({JGXkEgQ`~EpO!j6RNh6M5$Ve7G^5o?4ZDueIbI1rVSM}0B z1ErS9J@Y}JWe8ajZuU2&n@Z*A@5)~4{1r%zsZaMetL*j0MdLy(QX~tzq-Bxgq?$KX z-xBpmYKoegA%70VQ7Wq%#~3gj_U}xc+`nrkGjIOJG?R~UN(CuCUgc$DmxiJBWB(Q^ z8g@XntSfS3h|&f!-0_)#k8gpVPo2ctYG>AR+paLEC*|E02Dr8R!-j8=ZUY&bN>)Tr zz{(q_P|Py-uc`CDxbI1{Z?tu#`u9duozS3E-ZAB}1Q-3p_5rG9Z zqp(0mBo+kG98)b4$x|D4{>F9(^+R{-uddH!Xz7|IV*u>MV!(_tF}_uSSlYq1Pz+t; z%y0~-6_NqT2@3$JSZr(zv;sFE2>bt+yVanO`lf4lXDjB-uz6Q%mHv5^*Oj`U*xO_l znjMI8`}+prKidXjba*1`vyN}H_AyvxV!`aq)V5*5Xs0%iYN*!63oAHt(?&*UCe#ef zgcxD*JPv~^CJ#k!N1T#j07Zf(@*nQ?rW_zL<584$He8Z~9fQX_Ttv-CF+N#)PKEF6 z(<5_scnU0IrjwBu1`xlBH8Qiwa1z;MhfZSaB?I|eKAQxUWyaj+$ZgdxRue+Ziev!n z^@s@Syho!JW#DI=Etok8V^oO5a%#zMZ? zq|6Td+dsbLjh$<1Zm~A^JZGOLB-%h`S>!zpR`oDhhr`IiFi$!*ny3A+8`II)Z-FLj z!py2Be6ZO2jAtoeopuBX!W91 z%dw-iZz8&i#PrAK2W#cY_>i?6y$qFz6z)lsT_?_b{8`KcmJy9)bdXyy;Z&_*Y*b4Hp4`1#N*<4gU{ zDFt41ZQ_QC4#VYMSaxRNxwTU7{CM={c*Xir1FsO4ey64lE%dc6uSD1dmC z;+X(W(uU_Q%?+;_cvHZcR(K>qgqIcXZGi6uPFDdeFsI`DLgY@)?$mY-OwS++@iUs=f`lE zO`qjZ0&84_WkB7fRqkv&q9k+h+-F z-|`g~X9C+>aTr%P&~dSgrTJSt|A1$O=9r5gZPh9qIld}{qajvd*^dW~uQK+#UAcJv zqWOzft)H0eUp3jkaM7xM)s|Le4@l-nb+xv1u6D784Mt}nY*&wF{)UJ9V`CFzgK<~o z^2=Q6{0EHFE{+%2vls*Z!z5@Y%M3wa3l5E{S;EfOIe1RhI`xC;M0q+w<05C85Vw?<7I=TqXiP7q&tMlYHq&@?hnC_|&R* zrTi5YUENcO;;Bs)McZLsEh%lSD8<`fQS@p_&orK=UM*Sqn1~G)HVh5Ur}K9zUQw`&8gTL@<@OU~2QDj7mQ` zm3TBln~d<#)aL!kT?JEtj~lMfSguG$VE@$SgZK@F~y4L6bG z!IA~LH#kcw?SRJwprq2s9GNM^e6?h5;GxN8c)kQlKz^-?B7aH)&oHXJc&&aEug+bF zW;GmoI{D%k5LWKQ^E5-i$K3GVU)_liRQAgln9~gHA$SPD=iKmN<=ztj(WPMo-a{I~ zFY$}vnq-3%>4nh1Lz(^%VQDAGBYMvskih^}lFYeb64SXCr9G8+Mh_p=k5oU)-0EE; zg3wX2?CNC6ahlx6%Wd|!yCO#2+(Rl@ZfcuUt)9B5GZD$}qT zQ^77VVNE7%wF$cywqw^U`Gpt(KHH!Iu5S5A zeE#r&tEa$`PILHl4@Udq^Q)>p=+JJF5If6)`k^@;WLh$fon4s)C#U1yOay${Srrb` zP6vBxhIrcXGAhKOaSFD=9uB(}r-Rj?)c4-CP`Y;7$k2mA<1*_n^-vJv2-+jZ#g^i9kO`x?ymbBlwes*%<%>8n$9ip{OGqpOVh@?)veRMEy6nuy zZKbnG`63QdVPgqdYb;;?^NFJyjkv+yD_^2!W%wffmaki$`N_Xnz8+M*h?5x?TZHB7 z-uAU9Y?&%e+ogOFXO^}fU&p#z3o}NbsLQ#~8>}B2h4PVc#Z{&r((5g5;2b0z63PR* z+z2h&pNQf7uU<${`fu#*9~--IIO?teF(bok*Y{3LL>Kk;^^Z;9HZU9u#Z%gB4im$p z`QbOk;-e4l!(u+&UWc`=dkDaLgAG6I&s7NBxF*p*(H6%DcN$Q2osDF2|x0cOW zu&7o}G}YT&H=1E)TC=FCMxt_NdbXIE{tEq709A#?-p%uS0iIRt#q1`}%=CV^>sfgD zW~LmU7NCD?RDB$4YQC8o8~ZY&AB3GIA6_NktBwP29`J5I4!ljk+X1|J93^08qOTEd zixrMQ#48_t^uPHy@wOZX-rWdqEAY-$^BXq#eDUr9{0iXw@fdjI2}>~UU7-3p7NH0) zbE2y;|E>nkpu%JMxV5Tj`>+R);9U1A9DdW}qmP~E{{n9g$4VG8pKU`w;q1c7fKy?^ zbLUy1SPH!Pz*(p8%yig>cZNqM>Q3O?r|``D%MoyAjI%X@l~|K&*hS1&wEyz1w=^iVlGZkygxq9=;$7RFEaCLb%W z-?Qm(^)%3`r`-pRaMpcrs6$`PaD8QUzS6|G&gqn|?8fQxNP0q%)zg#mVLDwLNd@*z z1@4ZdI|_Pw))n<|Lh|ryoS6q6o=P0Tv>*V;i~Qy!FK}f0y22jJ5pH~UDdrCQobN7w zZF|~R+PmgD&dM%E0y)!`iR>(@eyXEOkCp20WZD*V>zj-9opnp%b3DoE^7`*=I(*># zsbKoXKa{7urJxQWJOAk1sULc6d(x#L$kjV{GU>^Kt@j~Nt(p^ZJzR_|>pYpsckYUv zpH5&g=h5Xz6ao&v^uj(pfV36sot(XQ?ng-=5T@~w*Gc1Udm3*&cndyN4Vw^TBo3uk zGrRlrCsM1Ah;$y+HB_$YslY86mFr$fdt&RB-$jhP~#^Qy4-9@Z3 zlcywir`e6*V|U3%r&sS>cfmS`%;=t;og5^W2>*ED6rN1Ou|+H$b}`4$115?^S*dCJ zV5v65i4r=-Cxc}!AR7f(o(jq-J=1y_osoe2lzIWX?6h zhL;#D?Z3<-&Rs1R4u3RUf;d(C^Ud$?7qQr1c7}jdI2|lR2cBylx%hxZAu9t7=eW*{ z*)v_74ptPJsdxD%EMMnHAgWTfFY-=KN2PL~_0QpZEnloIG@L7E#>IknI>_A6T=b*2 zqh^v;np*jTLd*8WymmS^;Z59{%jSRG@)c6PIOooc3qivd8AqD7UmtzN@@1cwXZj*v z;dB@@&H2am;8={Wbs{7=chB@S=XHGDrhIXoAk!D~-02{TiAc1Iwy(kfV8rzy{Siv7^ddiz>}oi{c`j z)4^8DbQNBF_b+neLQ;W4R+Rbd?fZB~Zd~jHGvk^g*#ZY(?K!@bVJw>V zqIk=fgdEI){4obo#7uxG)m(yFEHNs`nI^nCU_@^FYDf06&g(3MEU2xP%MR*&taXZoOKQ{#2G=QOi*<^l zs3jcgX!5O77z=X}1MfWR6b}IWIa?JXZoYL2cH?$>f4KGO1Z| zF_AHCEK3#Yfznj4Aho4vTRQ%Z{#FtFItTtP6ISth8NM|LiBcPidxfB=0^eka z3dJfNhm%6B2JZ`mjZ<raq z#u$*t7^$%N~ZN>^xIpnKy-D=t`K=!VL{_E=->RW&tA zh`_P-d@{v+%^2XJd641#A8h;1#h^ z!O)*O&suO5;AaBIYs1So)>Z(oRpG!YOg=pJq~pN*%rU}S0lY5)=TtUm7$zxSc$Wjd z060AgkF6vh-e&<{51ez^AYnK>=ffKVycRh3D?E~!50B09hrszE8x#yDJNfW9@m(y%7bBEJLOo;PJo{ zo}#-84$RUYOZF9MDNlh8Y_3;^i@XvfrSZyTQ-K#PWxM3A%3i^F za?R=rBN{N1rC=r@7kL>Vtp}`ZV)43SV}&!hxmf!u9U>)xaB-?g50|CJ3sRw?^j97N zRQRc$#^SI0z^v+Nie=ce*=);%>QW_ah1#WfGfN7EOkja<1^Hb=cWuSGwOUMNf)912 zzrYL;;UZMQtg^F_;gCfzePe}|E*hjMf*&r{yXNU_ReEpaiZ!ipylpoe2TSHZ_Q~Jv z^1pj_@{ws`$KL{{TQi(GlV251iPq#F9kI%F&Xsk+m2p=pxKa;RrpH(4!3w-({-npt zyTS37ftjxFb;r(64u-VkpkM1sf8`d0F6i#*sh&RIgxpC;YtUq2;ds+G=`bEG@Ppr@r52ZJ(kPWcx;G)Cg#-taiUOvQvajAPX>Y+(F0Vf>yXt0%57B+d|n>Y57NJN)hcxT*Ka$ncZ=No~G2wfg?*-OJLGn?yNwpcy`>AL>pg9!@77 zkY4rG4<&ciB)6>866d5hP{7m82_)L6(Tl)sR{Ub+RxI4&XC*i9&=RM2r6=ODhV&eG zo9??=4?lcasK}_X!sDq=23In*x-XInwo<1tP+I*g>aFl+i1bziqfq-S-m)V95H?wn z{{UN9xV{C!Tm@U1;I=uJEYlhQb1nKliZtcyor zYY{N^a{)+AA>F)-eU82ea?|tlD(JTMG0iuW-}{-IH^cbuSaq9XPY2TOrDZp7Ird_}*0T zX3C1W&KnXDut=JOjYTJ60TU*g`BF5RaB)dDL|yZDLrzQC<4f#4OLW|#qM@6ueqR4} zYV{#~OB|@|AFodbBS33g$#sr9Zbx|Zv={lC+I+a~!Yxh7Kf zQsQjgTcxaXmWzb+=;1>iNU7^fHho*r0hwd!!t@<1!MgG-m1uK^^kC7lWr(1-LN9nY zf`u1>h~zfbU%TmN9BMZoRt+bJ?a}b5MWCR+3`6jEm-XrDkVx~_ z8V!?4twM({B4hFn60$^44VxH*pw&&GZFoP@T(7?dZ~!9ua-<$mq0bLpe0EcmEF!ja z%?`tV82a%S1naNb^t4F8QG`&#Tr0ktGJ8)Id%mt^={-HnArXS^5V=rLu`FGR#QW+m z-1MF5=iwBTG>VXseGs50pP+DDM~;FvghyFAa`PH}p9pCxu}k*}9^$B8a3_%b6$pX^ zZztoBE=82dT@}C$?-zx0+NLK(OyRw%nux*m3=tT#rzwyRyo6HFUqdo3L^2emw)6&G z0?kbCe?Zm^JeKVdkx`}aTChVm{6x~rSe1$TB7+1rO8DDozIAWg(vND0C@#=ngI6Q; zU=MI#Ar^Haju54M%R+rKqEQhPXGOr?R7M~wkMxI>9;rWL(>;u<6d_y$_6^yiM{2e` zhq8#IpJQ1-0)7;jrS(OdehNy?LkxPs-FhgJzNs8I%Z#G=mN&u#$8LVap7jduxDkjuf1)B$G4)RHxgLh>sjt?S`i@4G^R%W*1xXA zp2bFENt;hhBfkn^Fsw`OTlyzyvoEo7n(cH{;7v1q$2ZT(#UbDAbZ{oZa8mnEe>NAV zNZ_o%y8uu9#(xKoLu`9ovjq-o2-=MHq5tw5(p{T+;2ePi&td}j$j^_0L&^?^D-KS_ z7~ZGg+3&snySX^U0*4WCP&xI%Pd%86Ll>umodM0Ju?8d}J1)+_oDRNeK7UE*a4t>> zT&(;V^8N3lGKKcEmkJ!RaLk{NFTDJs+;G^soDMFm5NG6bBiH5PoGEa)sKQwP*|#)L zd7UM2evCIu_h0AVb-xS;A0lM_(y$b;NGIO%B_VG!Auff(7A%bcVM;O~X-!JZG?kat1<>eHvlFMJ4R^?oX;5m69-wYjDdqnng#i#`krh0Ds)JY+`mEl zg$iOx+Bqc9P!B@pPeehiJs!gfVx?<~f}COc(iOy#&;PT6Sh9C9UqW1`n!a`_9O`b! z*ng}bR$MRVK>nBmDVClQwh_+Tav=3NkmU*@^@ErTQ3c^n6;wi)TNFf!FbFZkwWpal zU(5;lJ2{YFm=FyqweRRCLzqqnM;DssolO3eS^H8lceD7FFXCjJSM_X+!~n5Ro!U^K*pKBmfLK6e$y@Ckh%~|D+knvnGZVe<2S`lp%?eV{=bWlp*3? zdgaB6=Jk&6neiAT<6NhV1CCn336Tg9SLY}hBl8nio!*#0%0~ydJDW&WF$5E%P-;>B za`M6`Ae^;FB=z~amys)++>6xTzzM@f@%zWx#^OWba#Tg3P^NkPoDboe^k~e~vLT~r zW#x)kAI`viU7Z19AD+VvkdyM^Iah-SV3_P_PUBv4s zBdJ|kdCtxjr*h|Uw9nko>n-p3X>0y>39KnG0p>EW{UStxZMSua?S-{X2RoY!z{lz$%J zEmkB zbuyw&u_he4k3}GN83oGpP9ge%j6?TPBy&ogw<7*dietR4`0}o9DGRbT-9QjTt*}>> zG^lq?>`E>bN?B0sBHE=KD0VjOQU(;84G~C3dU+*R*`!1wQy$?5MTOcF-flcfOKqu* zP;Q4R<6fLpV3+P$nF{aj>K4@cE{J#Qo>kj?aocS(}`VEiMWKrc6vN?A1%a0;c`MM5T%JUA~S_3$SPZLcV_eMX^G#8-&eUGdhb zz<#EFY68-3{IcA1tnS*WsRT7B7M!Aj_2j7pmf?ZBY`ZEkEWKlsQ%9vNu^+#jEA5h5 z!)3yGg7&O>R*^}vXb`2KR}qW$&`M&_9{eJ`*BT^a%b!W|tC<-{lFwl&a>r5NB@`fJ zsEPfm0AKJG9h=HqK&xBOi)wZ2!Mh#UsESXsIe%)~raz_AsjuI{_m^(Q+Yqh> zAzZx_-ty-|8P0$%z%|i&9@=nxI7+O>O%SZPQzVQ`;VdZR*3M zV=6}JiMMp>X8g`|mu~kUF8x*g$gPi)hU9c5Bd?#L-%ZcSfOQdOI#w_xf{dgERp}pc z>Dg>qA{QtvLKhkywY;AZ7wHR{L4V&t@mfQ!sQBXyCXAK&`685F3 zz-}B2r3dEWpe63&Ozg(~NIg*11=V6~mXz@Z$AQx$gA9P_Nkllu1lF|F+sbw-FMHWtNzDr*{4;fgL3g3$io1!8CbB=lT zD0ji`;@7t4<0WEfxL@`x_a1Ogt-c?bJ(ajiWpy%o7&%hB|R;>@h1R_o*PlMhd!wh?cc_gG0+dr=`zP_~N9cDT~YWK~H!i?A10 z4_vSv)lCmq=&LK2W0&$i=4)vu+U9O%!X7X=+ig{lnI3q+O!(Z+hXGmnZCQ(5vI1j2 zFtJcM=Z2?c9m1CL!~;e-Yq$&DPdagd7-b=gV?9#|LLpU1jWf<6IPoYH zQZ=##xm}+v%b!7)hss=oZjkxCTb&iQpJB@$Q0AhD2SvcSgofk9RPIsk9@q_SxXx#g zzkYdw7ka<#I;i7WW5vrU+}@sEhCapgj82bTW#=mJ_ehFJq?@8{-40+#-nn~R!Ni5{m{0M36P9=4J*}4 zsm=$wz5yRvH_lOGLecJvEslbXe!nrUJh1k%b_DnRgFro(@*q$CA$G5GjW;bao2ic@$zOnYm#=R0Y zimnT_FPOG{uvOwI(|(P&Ti7rHf#<}533{jiwG1-kOOcYPn^3y=Wd@;CZ>j`W^N^?) zf*@#19&je7i!dUgYg`A_L~y4Vgjw}d0VpGsbwK4s($3*zZ_iZt@UpD&1Pt+O+r=Qv z;pDIwPNZ%Lnm7E2e$7N$=TO558rZHSN>^YZl7JOxT5VWT*z7g^O=l?2bS6sbmQ5V5Y_iI85$7?Nh~7KL=nUsvMH zg`Qb>La)}oFIVzd02il&i&b3MId^IbsOa@GB)sfCoQ|6nPU&y|`xm)5TuyO1SOe+% zwR?W@o?IN(R!a)=+{OQ}Zet9kqmlB;058gCOXKU|~HHlxWH#C%cvZOTp8pb8+n^aVkFazQ> zP=L)eN;N+TG$7=bX)GD*?GgalxPkL=1+nC(Use!Hp8F#Ov1Gmn6(mb6n?lHD-DF|P-EuC+FkNy2%)ARj#Xs})82LkHAUQ7C7joo{+78UT zh{LEpGDo15#iX0N=ySw~LiUwcLTS$*%dR5Jp<3(B0htN06RY*wzf@>88edobcWg0L z#tp6bfNV>Msq%=gc=c=ct*hDJ8l+h@>U4Uncf%Y@npL;hF3oy}kY+6aFNcv)n0(T# z0*)YdGlMj%ItwqKG^+{W{0Mk1jubHb$tT4i-XI+RP2sUC%7^Cz{8`|Xa&&^33GX7f z%?A!ojHj6iuLf@Gfpee2V@u8#?>xZ21f2gk2Hqcl_us(zFY*vD9Q^Wy*GM>ch#Sa9 zz;L+Bhj$qW{{V0vCJz9^Av_-*hvYW!0KMb`VAvby!@CghVc^`Ejb}Tkh5jGF^AEte zni0Z~m2vYFeVfu9;hX|IKpfRG&J-`nM>W#U&Bn{KPxK<-EVSXd^XwC?M0oYU=~s9& zmD>%#+W?$@S9mPGeEGug<|7lkn2|6ug~$4`4mh7scr%q72ec;?4#T6#7ccA8PmTj` z8So0hQ+1QCf|-dvI^U>p1R`Gf;#~{)X5jr);m(u}>NuYYKJ7v#2xg}G+y=L0!1<)Y zn<<~U^7;yJ`Z&VEunWmYUpL_Q0Ozp6o2g!11-w52rKWzf5eQl&}T(ey4z4g?G2GaScG)#Bw_}xKM&P1SobU za(%8eJ*g;xKmmtaz8Fb&6)Y3$5Bi}FtlPaN*I~paQE_Y~yUZvasWra_wlcA7x=z>- z4Fg6jwy+@;q3kW`()6}@$)N&AVs=FCQtH8CJ69Uyo&ew}wftTY*cEuM6gDmrvac75 zT}*@YVC=_{Nq~?E-Z{d_>|(~U#)Gbz(`!4lmWQe!S*!-3O8m>poX%^UGKgwQzcR>Yvye8{S=a$L_u>4h2(* zBdKsv{g1Y`Axp3LpW&yU-FVd}8dH#9JyHE!^<&uN^Lw04lc-52s*q_@1s{yq1RG_y z{;C?m06Y1LBk`=BIKrK}od@;JFW>qYBfyEQ2pw@G?n(P<)VkHh$bw-!WnxuI+E{<3 zZNjuY0^6v-6E#-~p1W1_n~SHAyhN#5Yo4gUftsn!M^cHSqTOJHYobV^LY%82CTAh* z1*J-3cnY=oc+2u&1?$A4R#P{r!$`5l_c98B-KvJQ{BQBR9v1q&5JfFnhJB*=U5ek2 zLs;PgV)SL42#ep;qLtF(Cg|J|5^me>fqfFGSB0zysAl-MKz?8!aXJ-vk!Nu3UAAoUvXaVOsm+LK<+p$nIP?Pk73K@8 zQTC;*0ILGK4_xp<;PzzrXxeb4({6#XiYSm+^z<+UP*)n@v6hb^^!Y+yVcag089eY- z?~!rvz|>XWKk&8}0`E(H*B-;_JtdXjmyw7=RTDc(x_<*)DI-A=S8-RL5cKu*l&lc_ zA+{O*cgYHNG#cnxy~Er~c8LV7`2`Pp{ZF7h3-{}u$2Y&3CGp@^k6AM=&V9U`~bUo^&n(4_m|vp6f_KX9%Tg| z#*Q=o1YTsjNpU^dek;!HF>gO2phkl=UKo8tMRd!dZ^Qe9`4rf}< zy-_b>8?n2nK3EfBPsEr4#q2J0E<3m7x?lx~mvO1U|HZR0lq!hhNl#H7QS# zzO~@MBk9CZwWF%@Xiv|92k7HN2H}tM4BS2N)mcS2OE%1sh42ck^`*(Poq=acDgj;@ z*dgl}l7E&HyZ9=RhbzMns=fr@!q4|h-g59G_ZTG+?WBa;kTQYe0Gt`~@Sy&*&HleP6+JRF7l@H~cR z8z`kpKTmHtwHOaLA4e5Vr@bEB*EIax;sEFB#JFAv4zU>aa*T3S2Ouxz4&&?` zxnyUYjavcR`2tpnw@cVKw3Byx#bkoNDgF_xW8+N;mUS| ztGopDYL`CSO>uQvAaLh%uw1xyr-HIKhGkxAOQitf(w|hY>dBzkWurgA)R76f43E5e zXDw`H;>5vzVPifs=&hVT+hHkPUK46sj@r98()x#L^doF}+IadV zo-;AG2Tcz!b~r_1OE3@Rp7+$`S%W2`kG)p%3--OcMc?aaQm2-%cA>U_RV;!;F4b0f zUAlW`A>cL1 z>v0rI(UWfO&BYl5Y(|ofOH4Wzo3>`y(4aPJn+p;j2T>2&2w1jQoB<34~?V832)8@OfEjx$ha>Pq8oqk<$}7DMn$>BNg^H!c7? zswNf2)B;=Y%NYbJ+EGz^_NNNoi%MryoWs27;VykM?k&K<{QLC8UNzl#1=EdU5LvQq zCHWL{%E7iT>xflbwwbU`nYOdhU`O#)rcuSwtV@`mL8TG(Nw0D9)@gB$A~-95A#Ow{17+x-^hUv?O%@z@QXK;W{_GJ{>(x8i>`9EMtjG?C z{be-iDlrG|D4<;akkSLdB;1(I;HV}s3unDsX9R$bvsga^yyH^rxSu=KQ=r!;uhtS! z@heJQtGg>xPTE3fqVtmLF#A4zxg01!&MfHces>#m{KSsDObdXu`NA5=E6oX z+`Z)La}8lt#1-eMy#)8U1o#Gs4X_Q(6(8ywbuC=HuxjzbMOW1QUW zpl++y}KjI)6wLzZ2IDlT)KHvt3hb+rnbK-;N!UjEXj z?vu-Uq_%)B7%7RgFGkbF>7Xwsp6NSI10Tk5fu>ykz_$yoc3)ud;LFE1oFqFP$=HcmpIvo^Z5O=cgiUXFf?*T$X2|aw-1R7@min{^vCasm)*RI45%<-H& z&sNH~iq3rSX=$^kf(*ZP^8CCxtC1{X+s|B>D{zQO7n+$)p09)(OWB$J#jf1AFfl<~ z>@8U*rmrl%FBgYX4tbLT!?~*Qu_tqJIGvRBkfnT4`R&L!L9;8pL+%`Qdski43Tb|Rg3~$o&;}1XK%f&fQ;3zqSw&QCLA)(oEk+*X?*5XZ? ze;z;d*<75r2pkG5Sm%A)uf8oet_uVXxkTn+a^we?N0Tx;&1fo!i-HQa^Y4ClD=Kj| zJ>*N|nG1Be`nq%fEjJw2Qm2DGJ#k*Rk(W7VhvO1BtqLbJ`(hL?acF)af5e+KLKq_6 z@+BcAvgQ)$Kn+*kEv=NdDu{K0z5_$VV0AEhgks3UZ+d`M(NsjtTjOg1Ah`j}+u> zCgkS|@>T)CMTcW!F-fz`4QycslQ1Es$fD28(6+e z#L^JT)b+Vf`65oHuS+s~Wu9p8RppB~nZDj3e6gRWah>sV3>^l|-&4MbGfO*yFGC-O zGBEqy7u3Na%sQ4psKgMoJWAHkc6Wt=D;+X|wB3ARV43%47ywfX#}t|XHY zk9A3h5vtg7Ka8#O$9>X+;nTYQ!hmFK&1V)^S769oS}vGoMUkm)WoQ+Nv%u*n&VW#U zh21!2e8$5eOe`bU7<)%Ft^!eCMlkBr%nbEym7xMyrD6n-dDesx84AQqjLd`4=*_%3 z70pxY#S{R?Gk}=DO(V81d0;_r|46hiCNBNZdT#*E`tkTi@9=0wsfnCcIHDKm9UjH8 z4MRwyJo`a|ni9WyhoU3nJP9J&*FO|e_E>a1j>zgAi;aVl=zyXJ1%6W^8rx`k5nr-u z8ZdSKLBQ`0hFinF#X0JL!pS*<7xA` z8y1aE3^pv{)Td#Qn)@^?GA2I_b&DHn7UAFYTi4=`H2FQ=fLnHS4Hd!GVZ7QJDm)%H zDs0x(uX(hz@*gtL+e_^&oIQ|XvcIXlb=4cw-decOb{4^fLVN2<@Mfc;iy@nd+jrxW zQS~X-#1E1~vYR~GTMxkfE##7H#;uil?Q9U8Zo{(^c!5HR$e(=L8Xp7vRyba8s>EZr zmk*Dua20So3ePbE9uw38oE^sq?`Gib0?tx$b1*Z}cM05X2F^VSZ>D&c0`JobhvCu8 zl#c%d-r-|}_en(bC*a(pMlv$g`NDewcu~wvuHgIzhWV5aZvo&x08Rl%XBdtu`S7kn zcozewhchx5PPX#l{T>DNJ>cwC+&2d=ftRHfQw#VI=N~qcPm9F`_j`^5k5iDZ9|s

  • 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

  • m;YE+2jtLwbBrMi~Aco06-Fqv}`(o%4{WN$0WD=RRa~ zIfwc439)AphQGe@-3GdgFZTZ1h?L}i-V2862Vdl)rE+-Edl9@|NuN?>K(dwh2fzHW zLy4#BFo2-3ADMLK&g_xK19X?&0fHAx_Zph7m->Ce10&}6)Q=Oq2&VZ4>>np{Db7uj zd85=XmoCG(O7y2@EHI^^UnF`?GC^-G`b7$_jm%rX1JG~jGBH*m6Lf8|nF*8dZX*+T z)c+CQvt$CVi%ifsDx1e-`{Obkmd$&RCJO&SG7-KV{S^711C!!U{Tji?Wb?RehRFo| zU!&h5{}Yp8ejRrKl8N*sfXNd)lT5&OlL@@FWFnk48UCdVQ-4Qy1imAiQL_IA?ubIa zMgA(tgg@%%bZLk$nTXdW+1x6dJ7n{RWFmh50X}EG4dq2<3F1rUx1|1!{GSF)cNJ29 zM({;)zZGMHRG3Q;e=-q%A(B$W#tMmUP1_>dZT*6AY$?r%ihMiz1Z6o0~{<`_z7gKx_J)0s zGVC7oc_(@4v~KhVw3EaxkWcI-fm|V}NudWA;jSAz2D7`@34f~xo!+CpK~DQR|GoYr zz2mXxim)07UxE2dZ!WNE26Me_y*K$bgXZtBy7xQ8^=DW`)jKJax1%=f5lq_K0>Ai% z->(n83UdqAawUwDQ5$v^Cbg~a-2wa=c(G|8+z2xtd0=Dr^kyOy*I=gihmcoj>|rj~ zA$d$5KZ{IK6!l4DhSSK{m)E9&>{lCtTs5TKhuvL4T1&*8WsuBjUAU76cLHf3dDS~M z^Y>LuINgy}k_nj{>>ZGuT5xBNi(!o?6FaT7q7nDw(QR6~Al`CtV4a0a@X<8Pg3Y+)Dg!S(q>Bc+Q4c1+F|5RdTcyT>W-`Ldz&%w7xQoczLh`o!AnpnZ(v5f8Hj)kT+KSc_=KI<7xV!5L$X63wn{Z3j zCWNvnGPz_^Br~unGA%e8yXZGX%qg29R?8;b6g3AjzPZ@7ZxG{C;>Ea76Wokqyrl_l zO~9cy9Vl1ng$U&vf{Aq8#(DeEGm~LvLQjL9s6o!3)nn}_oX2Cu&n-~C(_LcCZIGsN z8DYX((hf|LGGoV8XdTW3VviQ?x}+4@j>O?M#yI&lMkBwC@j>}E#{Wc_Q`00qfv$+r zxri^LZb-}?_BO#-W5H7GwBc1cxq<0FI%o_-?f~jhhUGDDd5n( zpR`{_k25^aE?v{M5iPC`E$+^6jlbR9;QKzlS^w&$JN<{hTazlho(>)+T! z7>`jK+_Vs@gg?U$3cZu;*5NB@?~O&&h6sb~eumu$Np0UOqE^HD_i?-Z#4FIsZu7DJ zr<*nbtGx-WughEX4)_V{e+G7%EoN|)XPe#uH%S#c<1yj><9CkQS)CErC zR5%TI%qDP~raQeg-lIqv--G)DYMI0V&c)j3kegY^^wa*`s?Rb<_#obN5~s49-2JxC zoZi=a-vrl@a-a%%Viv9-?unQUo?rAC!e%eSy^DvU@TXtUxi0Vl!pZ%N_|AUppO9cD z{MguEfT7q-;WoQ_JwA$a5BO0JQnZCrRCv(?z$acr6caxqZnT=aE1YN*+=&B``{1X< zgKB#>fm({c#P5S!GSb7a-*y1In3KKV;co9lZC%LYuCEV^`}SVggN~H%Z+)udyN$U~ zf9Pzk7PsSO=FqwnwKy%_kfOZ|LuX`XoCz1uyEJ;l<>KJcGvjWj6Atv& z;5si^)#D2>3UqEg!>&X7XAS%U0u;OTNg~ag_mmh%YW;?t1EiQ z_PxRxxTWz~xOG7vg>JGHm3Ez(iJL6V&{pUKXdCnx=p^W5=<(2#p);YUL8oo#I+L-1 z;&|Jmx-Szw z0D1v>A4!W_@r-~?*n>C*rzVncYhEF4xYS~g=y<%+W++(;`?auFN=G?ctqtk1J)JmdVFPWGV=Vd#CYsROXhAo@gFUvOos4f=fOz6i z7`Ug>rMi<8JPo&3mPoe@Qg31lpf>}LFT^`aTHL#-rMo+^f0}MJr8IBG?UCePht(BY zRbdwX8k1);ZuCQcguc*L0t&d#js?eH6>+pkw|MGsSDg-2v?XhB^0BTsdN2{3?tsmJ z(#mdMT$711JyeW#Fg=PBZPH#@1Mx!VdhE|HZ=dMDLimcIpDW8F@wXT9SVjtK4a9 z1u+QQ$@5ZjhxmZ)20RWX;olBZQG`$Yn`G{k#pM2dn1=zsFT-14{s@i_$?!gyiX#6* zc_oeQ+F+NB{49k@^nL|XQH1}R0>C8rP3X-k{9eEVfXR*g{|%-F6HJI9IBY`Pt^|B7 z;zaIW1N?8uCaMPnlMHM%V2B|&>;ilcFvXkPX+7oNP(F4UUJCeofHP#+3;0KXX^cwv z-v!(bSP6d(;MV{zmEE@jz7mB|A;bR;cs1Z_Ww;CQbAT7f@LPc6F;SiO6yT)hbiv;3NK0|~wV!8Lc}Qp9o zWY7|6wRn_VmwEB<$Xx}#%5r)yn`|VpvLdM*W{J1ArB_gJKPhYQ*T{|#Y!btjq5Pr8 z)raoJ<3Rz9^H>G3qC$BSotz~p?WHzD888$aA~FQz*W3>AzZ7{{5KHuA(JQ{lGWN>0 z>@*C<%j$T9ycVxkDP;LYb=*dYY+YUTT?<##t*mZP!oszF$ff+oZ`9UT<5_aN@FL?X z4tSE>Tdj5=Ikh^01YeRovXt*A1U)I9Jp1r=R&`}#Z4K(nW2i@F2*{$SKP2CyyXnkm zBwW^u%6<>Q5R4HoCD|jbxsq)0K{CNGpCEVOy+bDOh)3!m1EhP$=&rl7WCE`WZHw?8 zkj+QPM0k&piSXv2t(empqcvOeWQ0#91Z~7KOTi3pCDV>GY-A7FVk4Q;8GBeZACv75 zkcn_k$mVo33WBNqO+@3|Pv(_?k=}`DT+Jr!-F>5KceXuL%VuEjIre7dWAC{>CGT7-Zp=3hm~?3ZcA%Bm z@T!6_I2JqM@#bhS9MKbdsQ%`GmW#N8eXyDgN+JmmmM|J9m~(jJu#eUpisQ z2i=wojb_VK%)y)X(hTQ!^gdva&Uk>D2h=>8zWjs-1#{o86CTA$$49Z36>oLo&hEGn zcBOe}k66|_IfceP&A3qm$!3Ib8NI5AP*z&^?~J4c4HvAR(#y^CCZXX%{Kqr{e((c> zo_6@x=GnF;?>BG9NrfQo&b(2`6Bgh;jf;bM^oAmrJ@x-U(=t`aDRdMPZK9jZ=a57j zp^kk>Fg}I1nJ*+z-L4PmJB3kcF35_v$nQZ3z_9*U#kO?GlQw z;e!5S{XmydzhB9Jidk(Q<$!6M`N@Rsubr`NpjS=CJ;`$kIgu)q$~mzXUpPmB8$Cc7 z)c3}H4)y)GZ$AM0aYPwm-a+rA;7;>k!nT?`^OMNmfawtmL86OOAwde0a(ak9>+Fa8 z&EjimyG%&&X&gD>slU@Y#)Z>y;@Bu8KO8I^HLx_n_GDuBodVIK7c&!ollanh)Z+W0 z?LrFX^_E(~!rRpDJB34?V>J)d{sgCrt`x==CU3LC@1J^`vI&Dtnk*!5yAv%#|Kyv! zRqburHTb3$Lavk#cfx(LV0!Xc@7|bOe{VCIU2|Li!5_3G?Z++ff%}EET=qNNMYo#K zTiV!edC9+SUb{!UxA>1j=d)GDo8t3l!O+GS#_UG4=w1HN_Z zwG`j|@1bt=;~f-pXiucNdkbdanH`%VcFeS=<0PyHGw*4^O_4N;K_FZ7KsK9!nRrfX z8l=yuq6RYB;y{jAY{47GAxNPe%{V7aGG<7gxkQy@!fv#$;~b*Bu8Tt^QG>T2j5x(n z)G`&aUA&2GnI)P7Ok}t}#MlaXax1mQ6F47qJ0#c7rI??%5_chKpJG!Eh>KImExEH< z)O4?byc>7mi17}D37%qhTrCzjGDNLs666)+!nz?J@Zbz!cjBx3Ri0MUb_=8iI922s zdq&3+TIo$<+{YsdDL8FZV(q3IX{a_G1lPjp2AteAa^5gGd;sU5rLZ;j6x_74H8Rh! zB{C6mlKClVNY9qY1Xn6b3^)5jLZO4CLXR8y4YB)LaEi^&>|?`ahaD+mkd2JSX=UYI4BG2U;gbJcLGiEbEtTp}sLi(jeqntr)gWsv&fI#~bey_% zIZv@voRiR*!C{kC92PQvtP+gmu%p3Y9|MQAXmo|9&HATNuez_rEd!rdr-pbvOTR*( zdc=DX>~*a}ebR?eiyRN5KG~`Mpp4xXtXx3OpMkoS;j%-5gWGgMkomhzkT0c+x)z+y z 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 UoU54QdTd1R@-BRCJK?nVHv+4fHUIzs diff --git a/android/armeabi/include/chipmunk/chipmunk.h b/android/armeabi/include/chipmunk/chipmunk.h index 6337fb1a..d7faf039 100644 --- a/android/armeabi/include/chipmunk/chipmunk.h +++ b/android/armeabi/include/chipmunk/chipmunk.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,20 +19,26 @@ * SOFTWARE. */ -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif +#ifndef CHIPMUNK_H +#define CHIPMUNK_H #include #include +#ifdef WIN32 + // For alloca(). + #include + #define CP_EXPORT __declspec(dllexport) +#else + #include + #define CP_EXPORT +#endif + #ifdef __cplusplus extern "C" { #endif +// NUKE #ifndef CP_ALLOW_PRIVATE_ACCESS #define CP_ALLOW_PRIVATE_ACCESS 0 #endif @@ -43,22 +49,17 @@ extern "C" { #define CP_PRIVATE(__symbol__) __symbol__##_private #endif -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); +CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); #ifdef NDEBUG #define cpAssertWarn(__condition__, ...) + #define cpAssertSoft(__condition__, ...) #else + #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) #endif -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - +// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. +#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} #include "chipmunk_types.h" @@ -89,81 +90,90 @@ typedef struct cpArray cpArray; typedef struct cpHashSet cpHashSet; typedef struct cpBody cpBody; + typedef struct cpShape cpShape; +typedef struct cpCircleShape cpCircleShape; +typedef struct cpSegmentShape cpSegmentShape; +typedef struct cpPolyShape cpPolyShape; + typedef struct cpConstraint cpConstraint; +typedef struct cpPinJoint cpPinJoint; +typedef struct cpSlideJoint cpSlideJoint; +typedef struct cpPivotJoint cpPivotJoint; +typedef struct cpGrooveJoint cpGrooveJoint; +typedef struct cpDampedSpring cpDampedSpring; +typedef struct cpDampedRotarySpring cpDampedRotarySpring; +typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; +typedef struct cpRatchetJoint cpRatchetJoint; +typedef struct cpGearJoint cpGearJoint; +typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; typedef struct cpCollisionHandler cpCollisionHandler; +typedef struct cpContactPointSet cpContactPointSet; typedef struct cpArbiter cpArbiter; typedef struct cpSpace cpSpace; #include "cpVect.h" #include "cpBB.h" +#include "cpTransform.h" #include "cpSpatialIndex.h" +#include "cpArbiter.h" + #include "cpBody.h" #include "cpShape.h" #include "cpPolyShape.h" -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" +#include "cpConstraint.h" #include "cpSpace.h" +#include "cpHastySpace.h" -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 +// Chipmunk 7.0.1 +#define CP_VERSION_MAJOR 7 +#define CP_VERSION_MINOR 0 #define CP_VERSION_RELEASE 1 /// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - +CP_EXPORT extern const char *cpVersionString; /// Calculate the moment of inertia for a circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); +CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); /// Calculate area of a hollow circle. /// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); +CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); /// Calculate the moment of inertia for a line segment. /// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); +CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); /// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); +CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); /// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); /// Calculate the signed area of a polygon. A Clockwise winding gives positive area. /// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); /// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); +CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); +CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); /// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); +CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); /// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. +/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. /// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) /// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); +CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); #ifdef _MSC_VER #include "malloc.h" @@ -177,6 +187,15 @@ int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat t cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ +/// Returns the closest point on the line segment ab, to the point p. +static inline cpVect +cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) +{ + cpVect delta = cpvsub(a, b); + cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); + return cpvadd(b, cpvmult(delta, t)); +} + #if defined(__has_extension) #if __has_extension(blocks) // Define alternate block based alternatives for a few of the callback heavy functions. @@ -191,14 +210,14 @@ void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); +typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); +void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); +typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); +void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); +void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); diff --git a/android/armeabi/include/chipmunk/chipmunk/chipmunk.h b/android/armeabi/include/chipmunk/chipmunk/chipmunk.h deleted file mode 100644 index 6337fb1a..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/chipmunk.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#ifndef CHIPMUNK_HEADER -#define CHIPMUNK_HEADER - -#ifdef _MSC_VER - #define _USE_MATH_DEFINES -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) -#else - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -#ifdef NDEBUG - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__) -#endif - -// Hard assertions are important and cheap to execute. They are not disabled by compiling as debug. -#define cpAssertHard(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__) - - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; -typedef struct cpShape cpShape; -typedef struct cpConstraint cpConstraint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpSpatialIndex.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpArbiter.h" -#include "constraints/cpConstraint.h" - -#include "cpSpace.h" - -// Chipmunk 6.2.1 -#define CP_VERSION_MAJOR 6 -#define CP_VERSION_MINOR 2 -#define CP_VERSION_RELEASE 1 - -/// Version string. -extern const char *cpVersionString; - -/// @deprecated -void cpInitChipmunk(void); - -/// Enables segment to segment shape collisions. -void cpEnableSegmentToSegmentCollisions(void); - - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b); - -/// Calculate the area of a fattened (capsule shaped) line segment. -cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat r); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); - -/// Calculate the natural centroid of a polygon. -cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); - -/// Center the polygon on the origin. (Subtracts the centroid of the polygon from each vertex) -void cpRecenterPoly(const int numVerts, cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c result is @c NULL, then @c verts will be reduced instead. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -int cpConvexHull(int count, cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpaceNearestPointQueryBlock)(cpShape *shape, cpFloat distance, cpVect point); -void cpSpaceNearestPointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpFloat t, cpVect n); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/armeabi/include/chipmunk/chipmunk/chipmunk_ffi.h b/android/armeabi/include/chipmunk/chipmunk/chipmunk_ffi.h deleted file mode 100644 index 53ac6937..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); - -#endif diff --git a/android/armeabi/include/chipmunk/chipmunk/chipmunk_private.h b/android/armeabi/include/chipmunk/chipmunk/chipmunk_private.h deleted file mode 100644 index f676345b..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); diff --git a/android/armeabi/include/chipmunk/chipmunk/chipmunk_types.h b/android/armeabi/include/chipmunk/chipmunk/chipmunk_types.h deleted file mode 100644 index 9ed23391..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,222 +0,0 @@ -#include -#include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif - -#ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif - -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -typedef uintptr_t cpHashValue; - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef int cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; -#else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_LAYERS -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) -#endif -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; diff --git a/android/armeabi/include/chipmunk/chipmunk/chipmunk_unsafe.h b/android/armeabi/include/chipmunk/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 4428814c..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); -/// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpConstraint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedSpring.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpGearJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpPinJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpPivotJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/cpSlideJoint.h b/android/armeabi/include/chipmunk/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/constraints/util.h b/android/armeabi/include/chipmunk/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpArbiter.h b/android/armeabi/include/chipmunk/chipmunk/cpArbiter.h deleted file mode 100644 index 1ccb693d..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpArbiter.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. -/// @{ - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) - -// Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) - -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); - - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The array of contact points. - struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; - -/// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpBB.h b/android/armeabi/include/chipmunk/chipmunk/cpBB.h deleted file mode 100644 index 4e59c2d4..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpBB.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -// TODO edge case issue -/// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox - -///@} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpBody.h b/android/armeabi/include/chipmunk/chipmunk/cpBody.h deleted file mode 100644 index 6168b0fe..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpBody.h +++ /dev/null @@ -1,251 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - -/// Allocate a cpBody. -cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); -/// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); - -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} - -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} - -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} - - -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} - -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) -/// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) - -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - -/// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} - -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); - - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpPolyShape.h b/android/armeabi/include/chipmunk/chipmunk/cpPolyShape.h deleted file mode 100644 index a5587ba2..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - -/// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); - -/// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); -/// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpShape.h b/android/armeabi/include/chipmunk/chipmunk/cpShape.h deleted file mode 100644 index 62920c37..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpShape.h +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; - /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; - /// The normal of the surface hit. - cpVect n; -} cpSegmentQueryInfo; - -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. - cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; - -/// Destroy a shape. -void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} - -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} - -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} - -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} - -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) - -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); - -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) - -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); - -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - -/// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - -/// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpSpace.h b/android/armeabi/include/chipmunk/chipmunk/cpSpace.h deleted file mode 100644 index 26439f76..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpSpace.h +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); - - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); -}; - -/// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); - -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} - -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} - -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) - -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) - -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} - -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); - -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); - -/// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); - - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - -/// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - -/// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); - -/// @} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpSpatialIndex.h b/android/armeabi/include/chipmunk/chipmunk/cpSpatialIndex.h deleted file mode 100644 index c279cad0..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2010 Scott Lembcke - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/armeabi/include/chipmunk/chipmunk/cpVect.h b/android/armeabi/include/chipmunk/chipmunk/cpVect.h deleted file mode 100644 index 90855e56..00000000 --- a/android/armeabi/include/chipmunk/chipmunk/cpVect.h +++ /dev/null @@ -1,213 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) -{ - return cpvnormalize(v); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} diff --git a/android/armeabi/include/chipmunk/chipmunk_ffi.h b/android/armeabi/include/chipmunk/chipmunk_ffi.h index 53ac6937..c0248410 100644 --- a/android/armeabi/include/chipmunk/chipmunk_ffi.h +++ b/android/armeabi/include/chipmunk/chipmunk_ffi.h @@ -1,11 +1,35 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + #ifdef CHIPMUNK_FFI // Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs // This file should only be included in chipmunk.c +// TODO: get rid of the reliance on static inlines. +// They make a mess for FFIs. + #ifdef _MSC_VER #if _MSC_VER >= 1600 - #define MAKE_REF(name) decltype(name) *_##name = name + #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name #else #define MAKE_REF(name) #endif @@ -13,8 +37,9 @@ #define MAKE_REF(name) __typeof__(name) *_##name = name #endif -#define MAKE_PROPERTIES_REF(struct, property) \ - MAKE_REF(struct##Get##property); MAKE_REF(struct##Set##property) +#ifdef __cplusplus +extern "C" { +#endif MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() MAKE_REF(cpveql); @@ -35,7 +60,6 @@ MAKE_REF(cpvlengthsq); MAKE_REF(cpvlength); MAKE_REF(cpvlerp); MAKE_REF(cpvnormalize); -MAKE_REF(cpvnormalize_safe); MAKE_REF(cpvclamp); MAKE_REF(cpvlerpconst); MAKE_REF(cpvdist); @@ -50,104 +74,20 @@ MAKE_REF(cpflerp); MAKE_REF(cpflerpconst); MAKE_REF(cpBBNew); +MAKE_REF(cpBBNewForExtents); MAKE_REF(cpBBNewForCircle); MAKE_REF(cpBBIntersects); MAKE_REF(cpBBContainsBB); MAKE_REF(cpBBContainsVect); MAKE_REF(cpBBMerge); MAKE_REF(cpBBExpand); +MAKE_REF(cpBBCenter); MAKE_REF(cpBBArea); MAKE_REF(cpBBMergedArea); MAKE_REF(cpBBSegmentQuery); MAKE_REF(cpBBIntersectsSegment); MAKE_REF(cpBBClampVect); -MAKE_REF(cpBodyGetMass); -MAKE_REF(cpBodyGetMoment); -MAKE_REF(cpBodyGetPos); -MAKE_REF(cpBodyGetAngle); -MAKE_REF(cpBodyGetRot); -MAKE_PROPERTIES_REF(cpBody, Vel); -MAKE_PROPERTIES_REF(cpBody, Force); -MAKE_PROPERTIES_REF(cpBody, AngVel); -MAKE_PROPERTIES_REF(cpBody, Torque); -MAKE_PROPERTIES_REF(cpBody, VelLimit); -MAKE_PROPERTIES_REF(cpBody, AngVelLimit); -MAKE_PROPERTIES_REF(cpBody, UserData); -MAKE_REF(cpBodyIsSleeping); -MAKE_REF(cpBodyIsStatic); -MAKE_REF(cpBodyIsRogue); -MAKE_REF(cpBodyLocal2World); -MAKE_REF(cpBodyWorld2Local); -MAKE_REF(cpBodyKineticEnergy); - -MAKE_REF(cpShapeGetBB); -MAKE_PROPERTIES_REF(cpShape, Body); -MAKE_PROPERTIES_REF(cpShape, Sensor); -MAKE_PROPERTIES_REF(cpShape, Elasticity); -MAKE_PROPERTIES_REF(cpShape, Friction); -MAKE_PROPERTIES_REF(cpShape, SurfaceVelocity); -MAKE_PROPERTIES_REF(cpShape, UserData); -MAKE_PROPERTIES_REF(cpShape, CollisionType); -MAKE_PROPERTIES_REF(cpShape, Group); -MAKE_PROPERTIES_REF(cpShape, Layers); - -MAKE_REF(cpArbiterGetShapes); -MAKE_REF(cpArbiterGetBodies); -MAKE_REF(cpArbiterIsFirstContact); -MAKE_REF(cpArbiterGetCount); - -MAKE_REF(cpConstraintGetA); -MAKE_REF(cpConstraintGetB); -MAKE_PROPERTIES_REF(cpConstraint, MaxForce); -MAKE_PROPERTIES_REF(cpConstraint, ErrorBias); -MAKE_PROPERTIES_REF(cpConstraint, MaxBias); -MAKE_PROPERTIES_REF(cpConstraint, UserData); -MAKE_REF(cpConstraintGetImpulse); - -MAKE_PROPERTIES_REF(cpDampedRotarySpring, RestAngle); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedRotarySpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedRotarySpring, SpringTorqueFunc); - -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr1); -MAKE_PROPERTIES_REF(cpDampedSpring, Anchr2); -MAKE_PROPERTIES_REF(cpDampedSpring, RestLength); -MAKE_PROPERTIES_REF(cpDampedSpring, Stiffness); -MAKE_PROPERTIES_REF(cpDampedSpring, Damping); -//MAKE_PROPERTIES_REF(cpDampedSpring, SpringForceFunc); - -MAKE_PROPERTIES_REF(cpGearJoint, Phase); -MAKE_REF(cpGearJointGetRatio); - -MAKE_PROPERTIES_REF(cpGrooveJoint, Anchr2); -MAKE_REF(cpGrooveJointGetGrooveA); -MAKE_REF(cpGrooveJointGetGrooveB); - -MAKE_PROPERTIES_REF(cpPinJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPinJoint, Anchr2); -MAKE_PROPERTIES_REF(cpPinJoint, Dist); - -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr1); -MAKE_PROPERTIES_REF(cpPivotJoint, Anchr2); - -MAKE_PROPERTIES_REF(cpRatchetJoint, Angle); -MAKE_PROPERTIES_REF(cpRatchetJoint, Phase); -MAKE_PROPERTIES_REF(cpRatchetJoint, Ratchet); - -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Min); -MAKE_PROPERTIES_REF(cpRotaryLimitJoint, Max); - -MAKE_PROPERTIES_REF(cpSimpleMotor, Rate); - -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr1); -MAKE_PROPERTIES_REF(cpSlideJoint, Anchr2); -MAKE_PROPERTIES_REF(cpSlideJoint, Min); -MAKE_PROPERTIES_REF(cpSlideJoint, Max); - -MAKE_REF(cpSegmentQueryHitPoint); -MAKE_REF(cpSegmentQueryHitDist); - MAKE_REF(cpSpatialIndexDestroy); MAKE_REF(cpSpatialIndexCount); MAKE_REF(cpSpatialIndexEach); @@ -160,18 +100,8 @@ MAKE_REF(cpSpatialIndexSegmentQuery); MAKE_REF(cpSpatialIndexQuery); MAKE_REF(cpSpatialIndexReindexQuery); -MAKE_PROPERTIES_REF(cpSpace, Iterations); -MAKE_PROPERTIES_REF(cpSpace, Gravity); -MAKE_PROPERTIES_REF(cpSpace, Damping); -MAKE_PROPERTIES_REF(cpSpace, IdleSpeedThreshold); -MAKE_PROPERTIES_REF(cpSpace, SleepTimeThreshold); -MAKE_PROPERTIES_REF(cpSpace, CollisionSlop); -MAKE_PROPERTIES_REF(cpSpace, CollisionBias); -MAKE_PROPERTIES_REF(cpSpace, CollisionPersistence); -MAKE_PROPERTIES_REF(cpSpace, EnableContactGraph); -MAKE_PROPERTIES_REF(cpSpace, UserData); -MAKE_REF(cpSpaceGetStaticBody); -MAKE_REF(cpSpaceGetCurrentTimeStep); -MAKE_REF(cpSpaceIsLocked); +#ifdef __cplusplus +} +#endif #endif diff --git a/android/armeabi/include/chipmunk/chipmunk_private.h b/android/armeabi/include/chipmunk/chipmunk_private.h index f676345b..abe56395 100644 --- a/android/armeabi/include/chipmunk/chipmunk_private.h +++ b/android/armeabi/include/chipmunk/chipmunk_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#ifndef CHIPMUNK_PRIVATE_H +#define CHIPMUNK_PRIVATE_H +#ifdef CHIPMUNK_H +#error Cannot include chipmunk_private.h after chipmunk.h. +#endif #define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk.h" +#include "chipmunk/chipmunk.h" #define CP_HASH_COEF (3344921057ul) #define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) @@ -28,6 +33,7 @@ // TODO: Eww. Magic numbers. #define MAGIC_EPSILON 1e-5 + //MARK: cpArray struct cpArray { @@ -47,6 +53,690 @@ cpBool cpArrayContains(cpArray *arr, void *ptr); void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); +//MARK: cpHashSet + +typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); +typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); + +cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); +void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); + +void cpHashSetFree(cpHashSet *set); + +int cpHashSetCount(cpHashSet *set); +void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); +void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); +void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); + +typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); +void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); + +typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); +void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); + + +//MARK: Bodies + +struct cpBody { + // Integration functions + cpBodyVelocityFunc velocity_func; + cpBodyPositionFunc position_func; + + // mass and it's inverse + cpFloat m; + cpFloat m_inv; + + // moment of inertia and it's inverse + cpFloat i; + cpFloat i_inv; + + // center of gravity + cpVect cog; + + // position, velocity, force + cpVect p; + cpVect v; + cpVect f; + + // Angle, angular velocity, torque (radians) + cpFloat a; + cpFloat w; + cpFloat t; + + cpTransform transform; + + cpDataPointer userData; + + // "pseudo-velocities" used for eliminating overlap. + // Erin Catto has some papers that talk about what these are. + cpVect v_bias; + cpFloat w_bias; + + cpSpace *space; + + cpShape *shapeList; + cpArbiter *arbiterList; + cpConstraint *constraintList; + + struct { + cpBody *root; + cpBody *next; + cpFloat idleTime; + } sleeping; +}; + +void cpBodyAddShape(cpBody *body, cpShape *shape); +void cpBodyRemoveShape(cpBody *body, cpShape *shape); + +//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); +void cpBodyAccumulateMassFromShapes(cpBody *body); + +void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); + + +//MARK: Spatial Index Functions + +cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); + + +//MARK: Arbiters + +enum cpArbiterState { + // Arbiter is active and its the first collision. + CP_ARBITER_STATE_FIRST_COLLISION, + // Arbiter is active and its not the first collision. + CP_ARBITER_STATE_NORMAL, + // Collision has been explicitly ignored. + // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). + CP_ARBITER_STATE_IGNORE, + // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. + CP_ARBITER_STATE_CACHED, + // Collison arbiter is invalid because one of the shapes was removed. + CP_ARBITER_STATE_INVALIDATED, +}; + +struct cpArbiterThread { + struct cpArbiter *next, *prev; +}; + +struct cpContact { + cpVect r1, r2; + + cpFloat nMass, tMass; + cpFloat bounce; // TODO: look for an alternate bounce solution. + + cpFloat jnAcc, jtAcc, jBias; + cpFloat bias; + + cpHashValue hash; +}; + +struct cpCollisionInfo { + const cpShape *a, *b; + cpCollisionID id; + + cpVect n; + + int count; + // TODO Should this be a unique struct type? + struct cpContact *arr; +}; + +struct cpArbiter { + cpFloat e; + cpFloat u; + cpVect surface_vr; + + cpDataPointer data; + + const cpShape *a, *b; + cpBody *body_a, *body_b; + struct cpArbiterThread thread_a, thread_b; + + int count; + struct cpContact *contacts; + cpVect n; + + // Regular, wildcard A and wildcard B collision handlers. + cpCollisionHandler *handler, *handlerA, *handlerB; + cpBool swapped; + + cpTimestamp stamp; + enum cpArbiterState state; +}; + +cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); + +static inline struct cpArbiterThread * +cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) +{ + return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); +} + +void cpArbiterUnthread(cpArbiter *arb); + +void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); +void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); +void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); +void cpArbiterApplyImpulse(cpArbiter *arb); + + +//MARK: Shapes/Collisions + +struct cpShapeMassInfo { + cpFloat m; + cpFloat i; + cpVect cog; + cpFloat area; +}; + +typedef enum cpShapeType{ + CP_CIRCLE_SHAPE, + CP_SEGMENT_SHAPE, + CP_POLY_SHAPE, + CP_NUM_SHAPES +} cpShapeType; + +typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); +typedef void (*cpShapeDestroyImpl)(cpShape *shape); +typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); +typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); + +typedef struct cpShapeClass cpShapeClass; + +struct cpShapeClass { + cpShapeType type; + + cpShapeCacheDataImpl cacheData; + cpShapeDestroyImpl destroy; + cpShapePointQueryImpl pointQuery; + cpShapeSegmentQueryImpl segmentQuery; +}; + +struct cpShape { + const cpShapeClass *klass; + + cpSpace *space; + cpBody *body; + struct cpShapeMassInfo massInfo; + cpBB bb; + + cpBool sensor; + + cpFloat e; + cpFloat u; + cpVect surfaceV; + + cpDataPointer userData; + + cpCollisionType type; + cpShapeFilter filter; + + cpShape *next; + cpShape *prev; + + cpHashValue hashid; +}; + +struct cpCircleShape { + cpShape shape; + + cpVect c, tc; + cpFloat r; +}; + +struct cpSegmentShape { + cpShape shape; + + cpVect a, b, n; + cpVect ta, tb, tn; + cpFloat r; + + cpVect a_tangent, b_tangent; +}; + +struct cpSplittingPlane { + cpVect v0, n; +}; + +#define CP_POLY_SHAPE_INLINE_ALLOC 6 + +struct cpPolyShape { + cpShape shape; + + cpFloat r; + + int count; + // The untransformed planes are appended at the end of the transformed planes. + struct cpSplittingPlane *planes; + + // Allocate a small number of splitting planes internally for simple poly. + struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; +}; + +cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); + +static inline cpBool +cpShapeActive(cpShape *shape) +{ + // checks if the shape is added to a shape list. + // TODO could this just check the space now? + return (shape->prev || (shape->body && shape->body->shapeList == shape)); +} + +// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. +struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); + +static inline void +CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) +{ + cpVect da = cpvsub(a, center); + cpVect db = cpvsub(b, center); + cpFloat rsum = r1 + r2; + + cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); + cpFloat qb = cpvdot(da, db) - cpvdot(da, da); + cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); + + if(det >= 0.0f){ + cpFloat t = (-qb - cpfsqrt(det))/(qa); + if(0.0f<= t && t <= 1.0f){ + cpVect n = cpvnormalize(cpvlerp(da, db, t)); + + info->shape = shape; + info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); + info->normal = n; + info->alpha = t; + } + } +} + +static inline cpBool +cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) +{ + // Reject the collision if: + return ( + // They are in the same non-zero group. + (a.group != 0 && a.group == b.group) || + // One of the category/mask combinations fails. + (a.categories & b.mask) == 0 || + (b.categories & a.mask) == 0 + ); +} + +void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); + + +//MARK: Constraints +// TODO naming conventions here + +typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); +typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); +typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); +typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); + +typedef struct cpConstraintClass { + cpConstraintPreStepImpl preStep; + cpConstraintApplyCachedImpulseImpl applyCachedImpulse; + cpConstraintApplyImpulseImpl applyImpulse; + cpConstraintGetImpulseImpl getImpulse; +} cpConstraintClass; + +struct cpConstraint { + const cpConstraintClass *klass; + + cpSpace *space; + + cpBody *a, *b; + cpConstraint *next_a, *next_b; + + cpFloat maxForce; + cpFloat errorBias; + cpFloat maxBias; + + cpBool collideBodies; + + cpConstraintPreSolveFunc preSolve; + cpConstraintPostSolveFunc postSolve; + + cpDataPointer userData; +}; + +struct cpPinJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat dist; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpSlideJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat min, max; + + cpVect r1, r2; + cpVect n; + cpFloat nMass; + + cpFloat jnAcc; + cpFloat bias; +}; + +struct cpPivotJoint { + cpConstraint constraint; + cpVect anchorA, anchorB; + + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpGrooveJoint { + cpConstraint constraint; + cpVect grv_n, grv_a, grv_b; + cpVect anchorB; + + cpVect grv_tn; + cpFloat clamp; + cpVect r1, r2; + cpMat2x2 k; + + cpVect jAcc; + cpVect bias; +}; + +struct cpDampedSpring { + cpConstraint constraint; + cpVect anchorA, anchorB; + cpFloat restLength; + cpFloat stiffness; + cpFloat damping; + cpDampedSpringForceFunc springForceFunc; + + cpFloat target_vrn; + cpFloat v_coef; + + cpVect r1, r2; + cpFloat nMass; + cpVect n; + + cpFloat jAcc; +}; + +struct cpDampedRotarySpring { + cpConstraint constraint; + cpFloat restAngle; + cpFloat stiffness; + cpFloat damping; + cpDampedRotarySpringTorqueFunc springTorqueFunc; + + cpFloat target_wrn; + cpFloat w_coef; + + cpFloat iSum; + cpFloat jAcc; +}; + +struct cpRotaryLimitJoint { + cpConstraint constraint; + cpFloat min, max; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpRatchetJoint { + cpConstraint constraint; + cpFloat angle, phase, ratchet; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpGearJoint { + cpConstraint constraint; + cpFloat phase, ratio; + cpFloat ratio_inv; + + cpFloat iSum; + + cpFloat bias; + cpFloat jAcc; +}; + +struct cpSimpleMotor { + cpConstraint constraint; + cpFloat rate; + + cpFloat iSum; + + cpFloat jAcc; +}; + +void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); + +static inline void +cpConstraintActivateBodies(cpConstraint *constraint) +{ + cpBody *a = constraint->a; cpBodyActivate(a); + cpBody *b = constraint->b; cpBodyActivate(b); +} + +static inline cpVect +relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ + cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); + cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); + + return cpvsub(v2_sum, v1_sum); +} + +static inline cpFloat +normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ + return cpvdot(relative_velocity(a, b, r1, r2), n); +} + +static inline void +apply_impulse(cpBody *body, cpVect j, cpVect r){ + body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_impulse(a, cpvneg(j), r1); + apply_impulse(b, j, r2); +} + +static inline void +apply_bias_impulse(cpBody *body, cpVect j, cpVect r) +{ + body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); + body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); +} + +static inline void +apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) +{ + apply_bias_impulse(a, cpvneg(j), r1); + apply_bias_impulse(b, j, r2); +} + +static inline cpFloat +k_scalar_body(cpBody *body, cpVect r, cpVect n) +{ + cpFloat rcn = cpvcross(r, n); + return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; +} + +static inline cpFloat +k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) +{ + cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); + cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); + + return value; +} + +static inline cpMat2x2 +k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) +{ + cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); + + // start with Identity*m_sum + cpFloat k11 = m_sum, k12 = 0.0f; + cpFloat k21 = 0.0f, k22 = m_sum; + + // add the influence from r1 + cpFloat a_i_inv = a->CP_PRIVATE(i_inv); + cpFloat r1xsq = r1.x * r1.x * a_i_inv; + cpFloat r1ysq = r1.y * r1.y * a_i_inv; + cpFloat r1nxy = -r1.x * r1.y * a_i_inv; + k11 += r1ysq; k12 += r1nxy; + k21 += r1nxy; k22 += r1xsq; + + // add the influnce from r2 + cpFloat b_i_inv = b->CP_PRIVATE(i_inv); + cpFloat r2xsq = r2.x * r2.x * b_i_inv; + cpFloat r2ysq = r2.y * r2.y * b_i_inv; + cpFloat r2nxy = -r2.x * r2.y * b_i_inv; + k11 += r2ysq; k12 += r2nxy; + k21 += r2nxy; k22 += r2xsq; + + // invert + cpFloat det = k11*k22 - k12*k21; + cpAssertSoft(det != 0.0, "Unsolvable constraint."); + + cpFloat det_inv = 1.0f/det; + return cpMat2x2New( + k22*det_inv, -k12*det_inv, + -k21*det_inv, k11*det_inv + ); +} + +static inline cpFloat +bias_coef(cpFloat errorBias, cpFloat dt) +{ + return 1.0f - cpfpow(errorBias, dt); +} + + +//MARK: Spaces + +typedef struct cpContactBufferHeader cpContactBufferHeader; +typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); + +struct cpSpace { + int iterations; + + cpVect gravity; + cpFloat damping; + + cpFloat idleSpeedThreshold; + cpFloat sleepTimeThreshold; + + cpFloat collisionSlop; + cpFloat collisionBias; + cpTimestamp collisionPersistence; + + cpDataPointer userData; + + cpTimestamp stamp; + cpFloat curr_dt; + + cpArray *dynamicBodies; + cpArray *staticBodies; + cpArray *rousedBodies; + cpArray *sleepingComponents; + + cpHashValue shapeIDCounter; + cpSpatialIndex *staticShapes; + cpSpatialIndex *dynamicShapes; + + cpArray *constraints; + + cpArray *arbiters; + cpContactBufferHeader *contactBuffersHead; + cpHashSet *cachedArbiters; + cpArray *pooledArbiters; + + cpArray *allocatedBuffers; + unsigned int locked; + + cpBool usesWildcards; + cpHashSet *collisionHandlers; + cpCollisionHandler defaultHandler; + + cpBool skipPostStep; + cpArray *postStepCallbacks; + + cpBody *staticBody; + cpBody _staticBody; +}; + +#define cpAssertSpaceUnlocked(space) \ + cpAssertHard(!space->locked, \ + "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ + "Put these calls into a post-step callback." \ + ); + +void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); + +extern cpCollisionHandler cpCollisionHandlerDoNothing; + +void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); + +void cpSpacePushFreshContactBuffer(cpSpace *space); +struct cpContact *cpContactBufferGetArray(cpSpace *space); +void cpSpacePushContacts(cpSpace *space, int count); + +typedef struct cpPostStepCallback { + cpPostStepFunc func; + void *key; + void *data; +} cpPostStepCallback; + +cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); + +cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); +void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); + +void cpSpaceActivateBody(cpSpace *space, cpBody *body); +void cpSpaceLock(cpSpace *space); +void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); + +static inline void +cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) +{ + const cpShape *a = arb->a, *b = arb->b; + const cpShape *shape_pair[] = {a, b}; + cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); + cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); + cpArrayDeleteObj(space->arbiters, arb); +} + +static inline cpArray * +cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) +{ + return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); +} + +void cpShapeUpdateFunc(cpShape *shape, void *unused); +cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); + + //MARK: Foreach loops static inline cpConstraint * @@ -71,184 +761,6 @@ cpArbiterNext(cpArbiter *node, cpBody *body) for(cpShape *var = body->shapeList; var; var = var->next) #define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->node.next) + for(cpBody *var = root; var; var = var->sleeping.next) - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, void *data, cpHashSetTransFunc trans); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Body Functions - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Shape/Collision Functions - -// TODO should move this to the cpVect API. It's pretty useful. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -cpShape* cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - return shape->prev || (shape->body && shape->body->shapeList == shape); -} - -int cpCollideShapes(const cpShape *a, const cpShape *b, cpCollisionID *id, cpContact *arr); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r, cpVect a, cpVect b, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = -2.0f*cpvdot(da, da) + 2.0f*cpvdot(da, db); - cpFloat qc = cpvdot(da, da) - r*r; - - cpFloat det = qb*qb - 4.0f*qa*qc; - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(2.0f*qa); - if(0.0f<= t && t <= 1.0f){ - info->shape = shape; - info->t = t; - info->n = cpvnormalize(cpvlerp(da, db, t)); - } - } -} - -// TODO doesn't really need to be inline, but need a better place to put this function -static inline cpSplittingPlane -cpSplittingPlaneNew(cpVect a, cpVect b) -{ - cpVect n = cpvnormalize(cpvperp(cpvsub(b, a))); - cpSplittingPlane plane = {n, cpvdot(n, a)}; - return plane; -} - -static inline cpFloat -cpSplittingPlaneCompare(cpSplittingPlane plane, cpVect v) -{ - return cpvdot(plane.n, v) - plane.d; -} - -void cpLoopIndexes(cpVect *verts, int count, int *start, int *end); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Space Functions - -extern cpCollisionHandler cpDefaultCollisionHandler; -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline cpCollisionHandler * -cpSpaceLookupHandler(cpSpace *space, cpCollisionType a, cpCollisionType b) -{ - cpCollisionType types[] = {a, b}; - return (cpCollisionHandler *)cpHashSetFind(space->collisionHandlers, CP_HASH_PAIR(a, b), types); -} - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - cpShape *a = arb->a, *b = arb->b; - cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Arbiters - -struct cpContact { - cpVect p, n; - cpFloat dist; - - cpVect r1, r2; - cpFloat nMass, tMass, bounce; - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -cpContact* cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, cpHashValue hash); -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline void -cpArbiterCallSeparate(cpArbiter *arb, cpSpace *space) -{ - // The handler needs to be looked up again as the handler cached on the arbiter may have been deleted since the last step. - cpCollisionHandler *handler = cpSpaceLookupHandler(space, arb->a->collision_type, arb->b->collision_type); - handler->separate(arb, space, handler->data); -} - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, cpContact *contacts, int numContacts, struct cpCollisionHandler *handler, cpShape *a, cpShape *b); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); +#endif diff --git a/android/armeabi/include/chipmunk/chipmunk_types.h b/android/armeabi/include/chipmunk/chipmunk_types.h index 9ed23391..7aee0c79 100644 --- a/android/armeabi/include/chipmunk/chipmunk_types.h +++ b/android/armeabi/include/chipmunk/chipmunk_types.h @@ -1,31 +1,34 @@ +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software + * + * 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. + */ + +#ifndef CHIPMUNK_TYPES_H +#define CHIPMUNK_TYPES_H + #include #include - -#ifdef __APPLE__ - #include "TargetConditionals.h" -#endif - -#if ((TARGET_OS_IPHONE == 1) || (TARGET_OS_MAC == 1)) && (!defined CP_USE_CGPOINTS) - #define CP_USE_CGPOINTS 1 -#endif - -#if CP_USE_CGPOINTS == 1 - #if TARGET_OS_IPHONE - #import - #elif TARGET_OS_MAC - #include - #endif - - #if defined(__LP64__) && __LP64__ - #define CP_USE_DOUBLES 1 - #else - #define CP_USE_DOUBLES 0 - #endif -#endif +#include #ifndef CP_USE_DOUBLES - // use doubles by default for higher precision - #define CP_USE_DOUBLES 1 + // Use doubles by default for higher precision. + #define CP_USE_DOUBLES 0 #endif /// @defgroup basicTypes Basic Types @@ -82,13 +85,8 @@ #endif #endif -#ifndef M_PI - #define M_PI 3.14159265358979323846264338327950288 -#endif -#ifndef M_E - #define M_E 2.71828182845904523536028747135266250 -#endif +#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) /// Return the max of two cpFloats. @@ -136,7 +134,11 @@ static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) } /// Hash value type. -typedef uintptr_t cpHashValue; +#ifdef CP_HASH_VALUE_TYPE + typedef CP_HASH_VALUE_TYPE cpHashValue; +#else + typedef uintptr_t cpHashValue; +#endif /// Type used internally to cache colliding object info for cpCollideShapes(). /// Should be at least 32 bits. @@ -147,7 +149,7 @@ typedef uint32_t cpCollisionID; #ifdef CP_BOOL_TYPE typedef CP_BOOL_TYPE cpBool; #else - typedef int cpBool; + typedef unsigned char cpBool; #endif #ifndef cpTrue @@ -181,11 +183,11 @@ typedef uint32_t cpCollisionID; typedef uintptr_t cpGroup; #endif -#ifdef CP_LAYERS_TYPE - typedef CP_LAYERS_TYPE cpLayers; +#ifdef CP_BITMASK_TYPE + typedef CP_BITMASK_TYPE cpBitmask; #else -/// Type used for cpShape.layers. - typedef unsigned int cpLayers; +/// Type used for cpShapeFilter category and mask. + typedef unsigned int cpBitmask; #endif #ifdef CP_TIMESTAMP_TYPE @@ -200,15 +202,21 @@ typedef uint32_t cpCollisionID; #define CP_NO_GROUP ((cpGroup)0) #endif -#ifndef CP_ALL_LAYERS +#ifndef CP_ALL_CATEGORIES /// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_LAYERS (~(cpLayers)0) + #define CP_ALL_CATEGORIES (~(cpBitmask)0) #endif + +#ifndef CP_WILDCARD_COLLISION_TYPE +/// cpCollisionType value internally reserved for hashing wildcard handlers. + #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) +#endif + /// @} // CGPoints are structurally the same, and allow // easy interoperability with other Cocoa libraries -#if CP_USE_CGPOINTS +#if CP_USE_CGTYPES typedef CGPoint cpVect; #else /// Chipmunk's 2D vector type. @@ -216,7 +224,19 @@ typedef uint32_t cpCollisionID; typedef struct cpVect{cpFloat x,y;} cpVect; #endif +#if CP_USE_CGTYPES + typedef CGAffineTransform cpTransform; +#else + /// Column major affine transform. + typedef struct cpTransform { + cpFloat a, b, c, d, tx, ty; + } cpTransform; +#endif + +// NUKE typedef struct cpMat2x2 { // Row major [[a, b][c d]] cpFloat a, b, c, d; } cpMat2x2; + +#endif diff --git a/android/armeabi/include/chipmunk/chipmunk_unsafe.h b/android/armeabi/include/chipmunk/chipmunk_unsafe.h index 4428814c..990bd012 100644 --- a/android/armeabi/include/chipmunk/chipmunk_unsafe.h +++ b/android/armeabi/include/chipmunk/chipmunk_unsafe.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,27 +36,28 @@ /// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. /// @{ -#ifndef CHIPMUNK_UNSAFE_HEADER -#define CHIPMUNK_UNSAFE_HEADER +#ifndef CHIPMUNK_UNSAFE_H +#define CHIPMUNK_UNSAFE_H #ifdef __cplusplus extern "C" { #endif /// Set the radius of a circle shape. -void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the offset of a circle shape. -void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); +CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); /// Set the endpoints of a segment shape. -void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); +CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); /// Set the radius of a segment shape. -void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); /// Set the vertexes of a poly shape. -void cpPolyShapeSetVerts(cpShape *shape, int numVerts, cpVect *verts, cpVect offset); +CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); +CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); /// Set the radius of a poly shape. -void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); +CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); #ifdef __cplusplus } diff --git a/android/armeabi/include/chipmunk/constraints/cpConstraint.h b/android/armeabi/include/chipmunk/constraints/cpConstraint.h deleted file mode 100644 index d1059fff..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpConstraint.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -typedef struct cpConstraintClass cpConstraintClass; - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -/// @private -struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -}; - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - - -/// Opaque cpConstraint struct. -struct cpConstraint { - CP_PRIVATE(const cpConstraintClass *klass); - - /// The first body connected to this constraint. - cpBody *a; - /// The second body connected to this constraint. - cpBody *b; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpConstraint *next_a); - CP_PRIVATE(cpConstraint *next_b); - - /// The maximum force that this constraint is allowed to use. - /// Defaults to infinity. - cpFloat maxForce; - /// The rate at which joint error is corrected. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will - /// correct 10% of the error every 1/60th of a second. - cpFloat errorBias; - /// The maximum rate at which joint error is corrected. - /// Defaults to infinity. - cpFloat maxBias; - - /// Function called before the solver runs. - /// Animate your joint anchors, update your motor torque, etc. - cpConstraintPreSolveFunc preSolve; - - /// Function called after the solver runs. - /// Use the applied impulse to perform effects like breakable joints. - cpConstraintPostSolveFunc postSolve; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpConstraint reference in a callback. - cpDataPointer data; -}; - -/// Destroy a constraint. -void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -void cpConstraintFree(cpConstraint *constraint); - -/// @private -static inline void cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; if(a) cpBodyActivate(a); - cpBody *b = constraint->b; if(b) cpBodyActivate(b); -} - -/// @private -#define CP_DefineConstraintStructGetter(type, member, name) \ -static inline type cpConstraint##Get##name(const cpConstraint *constraint){return constraint->member;} - -/// @private -#define CP_DefineConstraintStructSetter(type, member, name) \ -static inline void cpConstraint##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintActivateBodies(constraint); \ - constraint->member = value; \ -} - -/// @private -#define CP_DefineConstraintStructProperty(type, member, name) \ -CP_DefineConstraintStructGetter(type, member, name) \ -CP_DefineConstraintStructSetter(type, member, name) - -CP_DefineConstraintStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineConstraintStructGetter(cpBody*, a, A) -CP_DefineConstraintStructGetter(cpBody*, b, B) -CP_DefineConstraintStructProperty(cpFloat, maxForce, MaxForce) -CP_DefineConstraintStructProperty(cpFloat, errorBias, ErrorBias) -CP_DefineConstraintStructProperty(cpFloat, maxBias, MaxBias) -CP_DefineConstraintStructProperty(cpConstraintPreSolveFunc, preSolve, PreSolveFunc) -CP_DefineConstraintStructProperty(cpConstraintPostSolveFunc, postSolve, PostSolveFunc) -CP_DefineConstraintStructProperty(cpDataPointer, data, UserData) - -// Get the last impulse applied by this constraint. -static inline cpFloat cpConstraintGetImpulse(cpConstraint *constraint) -{ - return constraint->CP_PRIVATE(klass)->getImpulse(constraint); -} - -/// @} - -#define cpConstraintCheckCast(constraint, struct) \ - cpAssertHard(constraint->CP_PRIVATE(klass) == struct##GetClass(), "Constraint is not a "#struct) - -#define CP_DefineConstraintGetter(struct, type, member, name) \ -static inline type struct##Get##name(const cpConstraint *constraint){ \ - cpConstraintCheckCast(constraint, struct); \ - return ((struct *)constraint)->member; \ -} - -#define CP_DefineConstraintSetter(struct, type, member, name) \ -static inline void struct##Set##name(cpConstraint *constraint, type value){ \ - cpConstraintCheckCast(constraint, struct); \ - cpConstraintActivateBodies(constraint); \ - ((struct *)constraint)->member = value; \ -} - -#define CP_DefineConstraintProperty(struct, type, member, name) \ -CP_DefineConstraintGetter(struct, type, member, name) \ -CP_DefineConstraintSetter(struct, type, member, name) - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" diff --git a/android/armeabi/include/chipmunk/constraints/cpDampedRotarySpring.h b/android/armeabi/include/chipmunk/constraints/cpDampedRotarySpring.h deleted file mode 100644 index 86cf915b..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpDampedRotarySpring.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -const cpConstraintClass *cpDampedRotarySpringGetClass(void); - -/// @private -typedef struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -} cpDampedRotarySpring; - -/// Allocate a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, restAngle, RestAngle) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedRotarySpring, cpDampedRotarySpringTorqueFunc, springTorqueFunc, SpringTorqueFunc) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpDampedSpring.h b/android/armeabi/include/chipmunk/constraints/cpDampedSpring.h deleted file mode 100644 index f5120647..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpDampedSpring.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -typedef struct cpDampedSpring cpDampedSpring; - -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -const cpConstraintClass *cpDampedSpringGetClass(void); - -/// @private -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -/// Allocate a damped spring. -cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpDampedSpring, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, restLength, RestLength) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, stiffness, Stiffness) -CP_DefineConstraintProperty(cpDampedSpring, cpFloat, damping, Damping) -CP_DefineConstraintProperty(cpDampedSpring, cpDampedSpringForceFunc, springForceFunc, SpringForceFunc) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpGearJoint.h b/android/armeabi/include/chipmunk/constraints/cpGearJoint.h deleted file mode 100644 index c9ebf942..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpGearJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -const cpConstraintClass *cpGearJointGetClass(void); - -/// @private -typedef struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpGearJoint; - -/// Allocate a gear joint. -cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -CP_DefineConstraintProperty(cpGearJoint, cpFloat, phase, Phase) -CP_DefineConstraintGetter(cpGearJoint, cpFloat, ratio, Ratio) -/// Set the ratio of a gear joint. -void cpGearJointSetRatio(cpConstraint *constraint, cpFloat value); - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpGrooveJoint.h b/android/armeabi/include/chipmunk/constraints/cpGrooveJoint.h deleted file mode 100644 index b260218f..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpGrooveJoint.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -const cpConstraintClass *cpGrooveJointGetClass(void); - -/// @private -typedef struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchr2; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpGrooveJoint; - -/// Allocate a groove joint. -cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); -/// Allocate and initialize a groove joint. -cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2); - -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_a, GrooveA) -/// Set endpoint a of a groove joint's groove -void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect value); -CP_DefineConstraintGetter(cpGrooveJoint, cpVect, grv_b, GrooveB) -/// Set endpoint b of a groove joint's groove -void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect value); -CP_DefineConstraintProperty(cpGrooveJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpPinJoint.h b/android/armeabi/include/chipmunk/constraints/cpPinJoint.h deleted file mode 100644 index 2413e84a..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpPinJoint.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -const cpConstraintClass *cpPinJointGetClass(void); - -/// @private -typedef struct cpPinJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpPinJoint; - -/// Allocate a pin joint. -cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pin joint. -cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPinJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpPinJoint, cpFloat, dist, Dist) - -///@} diff --git a/android/armeabi/include/chipmunk/constraints/cpPivotJoint.h b/android/armeabi/include/chipmunk/constraints/cpPivotJoint.h deleted file mode 100644 index a5d33174..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpPivotJoint.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -const cpConstraintClass *cpPivotJointGetClass(void); - -/// @private -typedef struct cpPivotJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -} cpPivotJoint; - -/// Allocate a pivot joint -cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); -/// Allocate and initialize a pivot joint. -cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2); - -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpPivotJoint, cpVect, anchr2, Anchr2) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpRatchetJoint.h b/android/armeabi/include/chipmunk/constraints/cpRatchetJoint.h deleted file mode 100644 index e371b108..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpRatchetJoint.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -const cpConstraintClass *cpRatchetJointGetClass(void); - -/// @private -typedef struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRatchetJoint; - -/// Allocate a ratchet joint. -cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, angle, Angle) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, phase, Phase) -CP_DefineConstraintProperty(cpRatchetJoint, cpFloat, ratchet, Ratchet) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpRotaryLimitJoint.h b/android/armeabi/include/chipmunk/constraints/cpRotaryLimitJoint.h deleted file mode 100644 index 2277e40f..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpRotaryLimitJoint.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -const cpConstraintClass *cpRotaryLimitJointGetClass(void); - -/// @private -typedef struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -} cpRotaryLimitJoint; - -/// Allocate a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpRotaryLimitJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpSimpleMotor.h b/android/armeabi/include/chipmunk/constraints/cpSimpleMotor.h deleted file mode 100644 index 37d28c5d..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpSimpleMotor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -const cpConstraintClass *cpSimpleMotorGetClass(void); - -/// @private -typedef struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -} cpSimpleMotor; - -/// Allocate a simple motor. -cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -CP_DefineConstraintProperty(cpSimpleMotor, cpFloat, rate, Rate) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/cpSlideJoint.h b/android/armeabi/include/chipmunk/constraints/cpSlideJoint.h deleted file mode 100644 index 40db8bba..00000000 --- a/android/armeabi/include/chipmunk/constraints/cpSlideJoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -const cpConstraintClass *cpSlideJointGetClass(void); - -/// @private -typedef struct cpSlideJoint { - cpConstraint constraint; - cpVect anchr1, anchr2; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -} cpSlideJoint; - -/// Allocate a slide joint. -cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max); - -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr1, Anchr1) -CP_DefineConstraintProperty(cpSlideJoint, cpVect, anchr2, Anchr2) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, min, Min) -CP_DefineConstraintProperty(cpSlideJoint, cpFloat, max, Max) - -/// @} diff --git a/android/armeabi/include/chipmunk/constraints/util.h b/android/armeabi/include/chipmunk/constraints/util.h deleted file mode 100644 index 0a620475..00000000 --- a/android/armeabi/include/chipmunk/constraints/util.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -// These are utility routines to use when creating custom constraints. -// I'm not sure if this should be part of the private API or not. -// I should probably clean up the naming conventions if it is... - -#define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;} - -void cpConstraintInit(cpConstraint *constraint, const cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->v, cpvmult(cpvperp(r1), a->w)); - cpVect v2_sum = cpvadd(b->v, cpvmult(cpvperp(r2), b->w)); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->v = cpvadd(body->v, cpvmult(j, body->m_inv)); - body->w += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->m_inv)); - body->CP_PRIVATE(w_bias) += body->i_inv*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->m_inv + body->i_inv*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->m_inv + b->m_inv; - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->i_inv; - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->i_inv; - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} diff --git a/android/armeabi/include/chipmunk/cpArbiter.h b/android/armeabi/include/chipmunk/cpArbiter.h index 1ccb693d..1dc130af 100644 --- a/android/armeabi/include/chipmunk/cpArbiter.h +++ b/android/armeabi/include/chipmunk/cpArbiter.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,188 +20,126 @@ */ /// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct controls pairs of colliding shapes. +/// The cpArbiter struct tracks pairs of colliding shapes. /// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision and control it. +/// allowing you to retrieve information on the collision or change it. +/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. /// @{ -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, void *data); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, void *data); - -/// @private -struct cpCollisionHandler { - cpCollisionType a; - cpCollisionType b; - cpCollisionBeginFunc begin; - cpCollisionPreSolveFunc preSolve; - cpCollisionPostSolveFunc postSolve; - cpCollisionSeparateFunc separate; - void *data; -}; - -typedef struct cpContact cpContact; - #define CP_MAX_CONTACTS_PER_ARBITER 2 -/// @private -typedef enum cpArbiterState { - // Arbiter is active and its the first collision. - cpArbiterStateFirstColl, - // Arbiter is active and its not the first collision. - cpArbiterStateNormal, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - cpArbiterStateIgnore, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - cpArbiterStateCached, -} cpArbiterState; - -/// @private -struct cpArbiterThread { - // Links to next and previous arbiters in the contact graph. - struct cpArbiter *next, *prev; -}; - -/// A colliding pair of shapes. -struct cpArbiter { - /// Calculated value to use for the elasticity coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat e; - /// Calculated value to use for the friction coefficient. - /// Override in a pre-solve collision handler for custom behavior. - cpFloat u; - /// Calculated value to use for applying surface velocities. - /// Override in a pre-solve collision handler for custom behavior. - cpVect surface_vr; - - /// User definable data pointer. - /// The value will persist for the pair of shapes until the separate() callback is called. - /// NOTE: If you need to clean up this pointer, you should implement the separate() callback to do it. - cpDataPointer data; - - CP_PRIVATE(cpShape *a); - CP_PRIVATE(cpShape *b); - CP_PRIVATE(cpBody *body_a); - CP_PRIVATE(cpBody *body_b); - - CP_PRIVATE(struct cpArbiterThread thread_a); - CP_PRIVATE(struct cpArbiterThread thread_b); - - CP_PRIVATE(int numContacts); - CP_PRIVATE(cpContact *contacts); - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpCollisionHandler *handler); - CP_PRIVATE(cpBool swappedColl); - CP_PRIVATE(cpArbiterState state); -}; - -#define CP_DefineArbiterStructGetter(type, member, name) \ -static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;} - -#define CP_DefineArbiterStructSetter(type, member, name) \ -static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;} - -#define CP_DefineArbiterStructProperty(type, member, name) \ -CP_DefineArbiterStructGetter(type, member, name) \ -CP_DefineArbiterStructSetter(type, member, name) - -CP_DefineArbiterStructProperty(cpFloat, e, Elasticity) -CP_DefineArbiterStructProperty(cpFloat, u, Friction) +/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); +/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); +/// Get the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); +/// Override the friction coefficient that will be applied to the pair of colliding objects. +CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); // Get the relative surface velocity of the two shapes in contact. -cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); +CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); // Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two -// surface velocities clamped to the tangent plane. -void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); +// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. +CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); -CP_DefineArbiterStructProperty(cpDataPointer, data, UserData) +/// Get the user data pointer associated with this pair of colliding objects. +CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); +/// Set a user data point associated with this pair of colliding objects. +/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. +CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); -/// Calculate the total impulse that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the total impulse including the friction that was applied by this arbiter. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpVect cpArbiterTotalImpulseWithFriction(const cpArbiter *arb); +CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); /// Calculate the amount of energy lost in a collision including static, but not dynamic friction. /// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -cpFloat cpArbiterTotalKE(const cpArbiter *arb); +CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Causes a collision pair to be ignored as if you returned false from a begin callback. -/// If called from a pre-step callback, you will still need to return false -/// if you want it to be ignored in the current step. -void cpArbiterIgnore(cpArbiter *arb); +/// Mark a collision pair to be ignored until the two objects separate. +/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. +CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); /// Return the colliding shapes involved for this arbiter. /// The order of their cpSpace.collision_type values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) -{ - if(arb->CP_PRIVATE(swappedColl)){ - (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a); - } else { - (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b); - } -} +CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); + /// A macro shortcut for defining and retrieving the shapes from an arbiter. #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); /// Return the colliding bodies involved for this arbiter. /// The order of the cpSpace.collision_type the bodies are associated with values will match /// the order set when the collision handler was registered. -static inline void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b) -{ - CP_ARBITER_GET_SHAPES(arb, shape_a, shape_b); - (*a) = shape_a->body; - (*b) = shape_b->body; -} +CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); + /// A macro shortcut for defining and retrieving the bodies from an arbiter. #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); /// A struct that wraps up the important collision data for an arbiter. -typedef struct cpContactPointSet { +struct cpContactPointSet { /// The number of contact points in the set. int count; + /// The normal of the collision. + cpVect normal; + /// The array of contact points. struct { - /// The position of the contact point. - cpVect point; - /// The normal of the contact point. - cpVect normal; - /// The depth of the contact point. - cpFloat dist; + /// The position of the contact on the surface of each shape. + cpVect pointA, pointB; + /// Penetration distance of the two shapes. Overlapping means it will be negative. + /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). + cpFloat distance; } points[CP_MAX_CONTACTS_PER_ARBITER]; -} cpContactPointSet; +}; /// Return a contact set from an arbiter. -cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); +CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); /// Replace the contact point set for an arbiter. /// This can be a very powerful feature, but use it with caution! -void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); +CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); /// Returns true if this is the first step a pair of objects started colliding. -cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); +/// Returns true if the separate callback is due to a shape being removed from the space. +CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); + /// Get the number of contact points for this arbiter. -int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the @c ith contact point. -cpVect cpArbiterGetNormal(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point. -cpVect cpArbiterGetPoint(const cpArbiter *arb, int i); +CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); +/// Get the normal of the collision. +CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); +/// Get the position of the @c ith contact point on the surface of the first shape. +CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); +/// Get the position of the @c ith contact point on the surface of the second shape. +CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); /// Get the depth of the @c ith contact point. -cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); +CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. +CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); + +/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); +/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. +CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); /// @} diff --git a/android/armeabi/include/chipmunk/cpBB.h b/android/armeabi/include/chipmunk/cpBB.h index 4e59c2d4..40200600 100644 --- a/android/armeabi/include/chipmunk/cpBB.h +++ b/android/armeabi/include/chipmunk/cpBB.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,12 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_BB_H +#define CHIPMUNK_BB_H + +#include "chipmunk_types.h" +#include "cpVect.h" + /// @defgroup cpBBB cpBB /// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. /// @{ @@ -35,10 +41,17 @@ static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, co return bb; } +/// Constructs a cpBB centered on a point with the given extents (half sizes). +static inline cpBB +cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) +{ + return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); +} + /// Constructs a cpBB for a circle with the given position and radius. static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) { - return cpBBNew(p.x - r, p.y - r, p.x + r, p.y + r); + return cpBBNewForExtents(p, r, r); } /// Returns true if @c a and @c b intersect. @@ -102,6 +115,9 @@ static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) { cpFloat idx = 1.0f/(b.x - a.x); +#ifdef _MSC_VER +#pragma warning(disable: 4056) +#endif cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); cpFloat txmin = cpfmin(tx1, tx2); @@ -110,6 +126,9 @@ static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) cpFloat idy = 1.0f/(b.y - a.y); cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); +#ifdef _MSC_VER +#pragma warning(default: 4056) +#endif cpFloat tymin = cpfmin(ty1, ty2); cpFloat tymax = cpfmax(ty1, ty2); @@ -136,8 +155,33 @@ cpBBClampVect(const cpBB bb, const cpVect v) return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); } -// TODO edge case issue /// Wrap a vector to a bounding box. -cpVect cpBBWrapVect(const cpBB bb, const cpVect v); // wrap a vector to a bbox +static inline cpVect +cpBBWrapVect(const cpBB bb, const cpVect v) +{ + cpFloat dx = cpfabs(bb.r - bb.l); + cpFloat modx = cpfmod(v.x - bb.l, dx); + cpFloat x = (modx > 0.0f) ? modx : modx + dx; + + cpFloat dy = cpfabs(bb.t - bb.b); + cpFloat mody = cpfmod(v.y - bb.b, dy); + cpFloat y = (mody > 0.0f) ? mody : mody + dy; + + return cpv(x + bb.l, y + bb.b); +} + +/// Returns a bounding box offseted by @c v. +static inline cpBB +cpBBOffset(const cpBB bb, const cpVect v) +{ + return cpBBNew( + bb.l + v.x, + bb.b + v.y, + bb.r + v.x, + bb.t + v.y + ); +} ///@} + +#endif diff --git a/android/armeabi/include/chipmunk/cpBody.h b/android/armeabi/include/chipmunk/cpBody.h index 6168b0fe..7e6943d1 100644 --- a/android/armeabi/include/chipmunk/cpBody.h +++ b/android/armeabi/include/chipmunk/cpBody.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -25,227 +25,165 @@ /// They are given a shape by creating collision shapes (cpShape) that point to the body. /// @{ +typedef enum cpBodyType { + /// A dynamic body is one that is affected by gravity, forces, and collisions. + /// This is the default body type. + CP_BODY_TYPE_DYNAMIC, + /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. + /// Instead the body only moves based on it's velocity. + /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. + /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. + CP_BODY_TYPE_KINEMATIC, + /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. + /// Chipmunk uses this information to optimize the collision detection. + /// Static bodies do not produce collision callbacks when colliding with other static bodies. + CP_BODY_TYPE_STATIC, +} cpBodyType; + /// Rigid body velocity update function type. typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); /// Rigid body position update function type. typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); -/// Used internally to track information on the collision graph. -/// @private -typedef struct cpComponentNode { - cpBody *root; - cpBody *next; - cpFloat idleTime; -} cpComponentNode; - -/// Chipmunk's rigid body struct. -struct cpBody { - /// Function that is called to integrate the body's velocity. (Defaults to cpBodyUpdateVelocity) - cpBodyVelocityFunc velocity_func; - - /// Function that is called to integrate the body's position. (Defaults to cpBodyUpdatePosition) - cpBodyPositionFunc position_func; - - /// Mass of the body. - /// Must agree with cpBody.m_inv! Use cpBodySetMass() when changing the mass for this reason. - cpFloat m; - /// Mass inverse. - cpFloat m_inv; - - /// Moment of inertia of the body. - /// Must agree with cpBody.i_inv! Use cpBodySetMoment() when changing the moment for this reason. - cpFloat i; - /// Moment of inertia inverse. - cpFloat i_inv; - - /// Position of the rigid body's center of gravity. - cpVect p; - /// Velocity of the rigid body's center of gravity. - cpVect v; - /// Force acting on the rigid body's center of gravity. - cpVect f; - - /// Rotation of the body around it's center of gravity in radians. - /// Must agree with cpBody.rot! Use cpBodySetAngle() when changing the angle for this reason. - cpFloat a; - /// Angular velocity of the body around it's center of gravity in radians/second. - cpFloat w; - /// Torque applied to the body around it's center of gravity. - cpFloat t; - - /// Cached unit length vector representing the angle of the body. - /// Used for fast rotations using cpvrotate(). - cpVect rot; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpBody reference in a callback. - cpDataPointer data; - - /// Maximum velocity allowed when updating the velocity. - cpFloat v_limit; - /// Maximum rotational rate (in radians/second) allowed when updating the angular velocity. - cpFloat w_limit; - - CP_PRIVATE(cpVect v_bias); - CP_PRIVATE(cpFloat w_bias); - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *shapeList); - CP_PRIVATE(cpArbiter *arbiterList); - CP_PRIVATE(cpConstraint *constraintList); - - CP_PRIVATE(cpComponentNode node); -}; - /// Allocate a cpBody. -cpBody* cpBodyAlloc(void); +CP_EXPORT cpBody* cpBodyAlloc(void); /// Initialize a cpBody. -cpBody* cpBodyInit(cpBody *body, cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); /// Allocate and initialize a cpBody. -cpBody* cpBodyNew(cpFloat m, cpFloat i); +CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); -/// Initialize a static cpBody. -cpBody* cpBodyInitStatic(cpBody *body); -/// Allocate and initialize a static cpBody. -cpBody* cpBodyNewStatic(void); +/// Allocate and initialize a cpBody, and set it as a kinematic body. +CP_EXPORT cpBody* cpBodyNewKinematic(void); +/// Allocate and initialize a cpBody, and set it as a static body. +CP_EXPORT cpBody* cpBodyNewStatic(void); /// Destroy a cpBody. -void cpBodyDestroy(cpBody *body); +CP_EXPORT void cpBodyDestroy(cpBody *body); /// Destroy and free a cpBody. -void cpBodyFree(cpBody *body); - -/// Check that the properties of a body is sane. (Only in debug mode) -#ifdef NDEBUG - #define cpBodyAssertSane(body) -#else - void cpBodySanityCheck(cpBody *body); - #define cpBodyAssertSane(body) cpBodySanityCheck(body) -#endif +CP_EXPORT void cpBodyFree(cpBody *body); // Defined in cpSpace.c /// Wake up a sleeping or idle body. -void cpBodyActivate(cpBody *body); +CP_EXPORT void cpBodyActivate(cpBody *body); /// Wake up any sleeping or idle bodies touching a static body. -void cpBodyActivateStatic(cpBody *body, cpShape *filter); +CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); /// Force a body to fall asleep immediately. -void cpBodySleep(cpBody *body); +CP_EXPORT void cpBodySleep(cpBody *body); /// Force a body to fall asleep immediately along with other bodies in a group. -void cpBodySleepWithGroup(cpBody *body, cpBody *group); +CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); /// Returns true if the body is sleeping. -static inline cpBool cpBodyIsSleeping(const cpBody *body) -{ - return (CP_PRIVATE(body->node).root != ((cpBody*)0)); -} +CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); -/// Returns true if the body is static. -static inline cpBool cpBodyIsStatic(const cpBody *body) -{ - return CP_PRIVATE(body->node).idleTime == INFINITY; -} +/// Get the type of the body. +CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); +/// Set the type of the body. +CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); -/// Returns true if the body has not been added to a space. -/// Note: Static bodies are a subtype of rogue bodies. -static inline cpBool cpBodyIsRogue(const cpBody *body) -{ - return (body->CP_PRIVATE(space) == ((cpSpace*)0)); -} +/// Get the space this body is added to. +CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); +/// Get the mass of the body. +CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); +/// Set the mass of the body. +CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); -#define CP_DefineBodyStructGetter(type, member, name) \ -static inline type cpBodyGet##name(const cpBody *body){return body->member;} +/// Get the moment of inertia of the body. +CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); +/// Set the moment of inertia of the body. +CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); -#define CP_DefineBodyStructSetter(type, member, name) \ -static inline void cpBodySet##name(cpBody *body, const type value){ \ - cpBodyActivate(body); \ - body->member = value; \ - cpBodyAssertSane(body); \ -} - -#define CP_DefineBodyStructProperty(type, member, name) \ -CP_DefineBodyStructGetter(type, member, name) \ -CP_DefineBodyStructSetter(type, member, name) - -// TODO add to docs -CP_DefineBodyStructGetter(cpSpace*, CP_PRIVATE(space), Space) - -CP_DefineBodyStructGetter(cpFloat, m, Mass) -/// Set the mass of a body. -void cpBodySetMass(cpBody *body, cpFloat m); - -CP_DefineBodyStructGetter(cpFloat, i, Moment) -/// Set the moment of a body. -void cpBodySetMoment(cpBody *body, cpFloat i); - -CP_DefineBodyStructGetter(cpVect, p, Pos) /// Set the position of a body. -void cpBodySetPos(cpBody *body, cpVect pos); -CP_DefineBodyStructProperty(cpVect, v, Vel) -CP_DefineBodyStructProperty(cpVect, f, Force) -CP_DefineBodyStructGetter(cpFloat, a, Angle) -/// Set the angle of a body. -void cpBodySetAngle(cpBody *body, cpFloat a); -CP_DefineBodyStructProperty(cpFloat, w, AngVel) -CP_DefineBodyStructProperty(cpFloat, t, Torque) -CP_DefineBodyStructGetter(cpVect, rot, Rot) -CP_DefineBodyStructProperty(cpFloat, v_limit, VelLimit) -CP_DefineBodyStructProperty(cpFloat, w_limit, AngVelLimit) -CP_DefineBodyStructProperty(cpDataPointer, data, UserData) +CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); +/// Set the position of the body. +CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); -/// Default Integration functions. -void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -void cpBodyUpdatePosition(cpBody *body, cpFloat dt); +/// Get the offset of the center of gravity in body local coordinates. +CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); +/// Set the offset of the center of gravity in body local coordinates. +CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); + +/// Get the velocity of the body. +CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); +/// Set the velocity of the body. +CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); + +/// Get the force applied to the body for the next time step. +CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); +/// Set the force applied to the body for the next time step. +CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); + +/// Get the angle of the body. +CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); +/// Set the angle of a body. +CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); + +/// Get the angular velocity of the body. +CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); +/// Set the angular velocity of the body. +CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); + +/// Get the torque applied to the body for the next time step. +CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); +/// Set the torque applied to the body for the next time step. +CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); + +/// Get the rotation vector of the body. (The x basis vector of it's transform.) +CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); + +/// Get the user data pointer assigned to the body. +CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); +/// Set the user data pointer assigned to the body. +CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); + +/// Set the callback used to update a body's velocity. +CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); +/// Set the callback used to update a body's position. +/// NOTE: It's not generally recommended to override this unless you call the default position update function. +CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); + +/// Default velocity integration function.. +CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); +/// Default position integration function. +CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); /// Convert body relative/local coordinates to absolute/world coordinates. -static inline cpVect cpBodyLocal2World(const cpBody *body, const cpVect v) -{ - return cpvadd(body->p, cpvrotate(v, body->rot)); -} - +CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); /// Convert body absolute/world coordinates to relative/local coordinates. -static inline cpVect cpBodyWorld2Local(const cpBody *body, const cpVect v) -{ - return cpvunrotate(cpvsub(v, body->p), body->rot); -} +CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); -/// Set the forces and torque or a body to zero. -void cpBodyResetForces(cpBody *body); -/// Apply an force (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyForce(cpBody *body, const cpVect f, const cpVect r); -/// Apply an impulse (in world coordinates) to the body at a point relative to the center of gravity (also in world coordinates). -void cpBodyApplyImpulse(cpBody *body, const cpVect j, const cpVect r); +/// Apply a force to a body. Both the force and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); +/// Apply a force to a body. Both the force and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); + +/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. +CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); +/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. +CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in world coordinates. -cpVect cpBodyGetVelAtWorldPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); /// Get the velocity on a body (in world units) at a point on the body in local coordinates. -cpVect cpBodyGetVelAtLocalPoint(cpBody *body, cpVect point); +CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the kinetic energy of a body. -static inline cpFloat cpBodyKineticEnergy(const cpBody *body) -{ - // Need to do some fudging to avoid NaNs - cpFloat vsq = cpvdot(body->v, body->v); - cpFloat wsq = body->w*body->w; - return (vsq ? vsq*body->m : 0.0f) + (wsq ? wsq*body->i : 0.0f); -} +/// Get the amount of kinetic energy contained by the body. +CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); /// Body/shape iterator callback function type. typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); /// Call @c func once for each shape attached to @c body and added to the space. -void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); /// Body/constraint iterator callback function type. typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); /// Call @c func once for each constraint attached to @c body and added to the space. -void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); /// Body/arbiter iterator callback function type. typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); /// Call @c func once for each arbiter that is currently active on the body. -void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); +CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); ///@} diff --git a/android/armeabi/include/chipmunk/cpPolyShape.h b/android/armeabi/include/chipmunk/cpPolyShape.h index a5587ba2..25f688b8 100644 --- a/android/armeabi/include/chipmunk/cpPolyShape.h +++ b/android/armeabi/include/chipmunk/cpPolyShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,60 +22,35 @@ /// @defgroup cpPolyShape cpPolyShape /// @{ -/// @private -typedef struct cpSplittingPlane { - cpVect n; - cpFloat d; -} cpSplittingPlane; - -/// @private -typedef struct cpPolyShape { - cpShape shape; - - int numVerts; - cpVect *verts, *tVerts; - cpSplittingPlane *planes, *tPlanes; - - cpFloat r; -} cpPolyShape; - /// Allocate a polygon shape. -cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); +/// Initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Initialize a polygon shape. +CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. /// A convex hull will be created from the vertexes. -cpPolyShape* cpPolyShapeInit2(cpPolyShape *poly, cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew(cpBody *body, int numVerts, const cpVect *verts, cpVect offset); -/// Allocate and initialize a polygon shape. -/// A convex hull will be created from the vertexes. -cpShape* cpPolyShapeNew2(cpBody *body, int numVerts, const cpVect *verts, cpVect offset, cpFloat radius); +CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); +/// Allocate and initialize a polygon shape with rounded corners. +/// The vertexes must be convex with a counter-clockwise winding. +CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Initialize a box shaped polygon shape. -cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box); -/// Initialize an offset box shaped polygon shape. -cpPolyShape* cpBoxShapeInit3(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); +/// Initialize a box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); +/// Initialize an offset box shaped polygon shape with rounded corners. +CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); /// Allocate and initialize a box shaped polygon shape. -cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height); +CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); /// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew2(cpBody *body, cpBB box); -/// Allocate and initialize an offset box shaped polygon shape. -cpShape* cpBoxShapeNew3(cpBody *body, cpBB box, cpFloat radius); - -/// Check that a set of vertexes is convex and has a clockwise winding. -/// NOTE: Due to floating point precision issues, hulls created with cpQuickHull() are not guaranteed to validate! -cpBool cpPolyValidate(const cpVect *verts, const int numVerts); +CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); /// Get the number of verts in a polygon shape. -int cpPolyShapeGetNumVerts(const cpShape *shape); +CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); /// Get the @c ith vertex of a polygon shape. -cpVect cpPolyShapeGetVert(const cpShape *shape, int idx); +CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); /// Get the radius of a polygon shape. -cpFloat cpPolyShapeGetRadius(const cpShape *shape); +CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi/include/chipmunk/cpShape.h b/android/armeabi/include/chipmunk/cpShape.h index 62920c37..cc20f809 100644 --- a/android/armeabi/include/chipmunk/cpShape.h +++ b/android/armeabi/include/chipmunk/cpShape.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -18,215 +18,182 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + /// @defgroup cpShape cpShape /// The cpShape struct defines the shape of a rigid body. /// @{ -typedef struct cpShapeClass cpShapeClass; - -/// Nearest point query info struct. -typedef struct cpNearestPointQueryInfo { +/// Point query info struct. +typedef struct cpPointQueryInfo { /// The nearest shape, NULL if no shape was within range. - cpShape *shape; + const cpShape *shape; /// The closest point on the shape's surface. (in world space coordinates) - cpVect p; + cpVect point; /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat d; + cpFloat distance; /// The gradient of the signed distance function. - /// The same as info.p/info.d, but accurate even for very small values of info.d. - cpVect g; -} cpNearestPointQueryInfo; + /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. + cpVect gradient; +} cpPointQueryInfo; /// Segment query info struct. typedef struct cpSegmentQueryInfo { - /// The shape that was hit, NULL if no collision occured. - cpShape *shape; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat t; + /// The shape that was hit, or NULL if no collision occured. + const cpShape *shape; + /// The point of impact. + cpVect point; /// The normal of the surface hit. - cpVect n; + cpVect normal; + /// The normalized distance along the query segment in the range [0, 1]. + cpFloat alpha; } cpSegmentQueryInfo; -/// @private -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpVect p, cpVect rot); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapeNearestPointQueryImpl)(cpShape *shape, cpVect p, cpNearestPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); - -/// @private -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapeNearestPointQueryImpl nearestPointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -/// Opaque collision shape struct. -struct cpShape { - CP_PRIVATE(const cpShapeClass *klass); - - /// The rigid body this collision shape is attached to. - cpBody *body; - - /// The current bounding box of the shape. - cpBB bb; - - /// Sensor flag. - /// Sensor shapes call collision callbacks but don't produce collisions. - cpBool sensor; - - /// Coefficient of restitution. (elasticity) - cpFloat e; - /// Coefficient of friction. - cpFloat u; - /// Surface velocity used when solving for friction. - cpVect surface_v; - - /// User definable data pointer. - /// Generally this points to your the game object class so you can access it - /// when given a cpShape reference in a callback. - cpDataPointer data; - - /// Collision type of this shape used when picking collision handlers. - cpCollisionType collision_type; - /// Group of this shape. Shapes in the same group don't collide. +/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. +typedef struct cpShapeFilter { + /// Two objects with the same non-zero group value do not collide. + /// This is generally used to group objects in a composite object together to disable self collisions. cpGroup group; - // Layer bitmask for this shape. Shapes only collide if the bitwise and of their layers is non-zero. - cpLayers layers; - - CP_PRIVATE(cpSpace *space); - - CP_PRIVATE(cpShape *next); - CP_PRIVATE(cpShape *prev); - - CP_PRIVATE(cpHashValue hashid); -}; + /// A bitmask of user definable categories that this object belongs to. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask categories; + /// A bitmask of user definable category types that this object object collides with. + /// The category/mask combinations of both objects in a collision must agree for a collision to occur. + cpBitmask mask; +} cpShapeFilter; + +/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. +static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; +/// Collision filter value for a shape that does not collide with anything. +static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; + +/// Create a new collision filter. +static inline cpShapeFilter +cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) +{ + cpShapeFilter filter = {group, categories, mask}; + return filter; +} /// Destroy a shape. -void cpShapeDestroy(cpShape *shape); +CP_EXPORT void cpShapeDestroy(cpShape *shape); /// Destroy and Free a shape. -void cpShapeFree(cpShape *shape); +CP_EXPORT void cpShapeFree(cpShape *shape); /// Update, cache and return the bounding box of a shape based on the body it's attached to. -cpBB cpShapeCacheBB(cpShape *shape); +CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); /// Update, cache and return the bounding box of a shape with an explicit transformation. -cpBB cpShapeUpdate(cpShape *shape, cpVect pos, cpVect rot); - -/// Test if a point lies within a shape. -cpBool cpShapePointQuery(cpShape *shape, cpVect p); +CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); /// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. /// The value returned is the distance between the points. A negative distance means the point is inside the shape. -cpFloat cpShapeNearestPointQuery(cpShape *shape, cpVect p, cpNearestPointQueryInfo *out); +CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); /// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -cpBool cpShapeSegmentQuery(cpShape *shape, cpVect a, cpVect b, cpSegmentQueryInfo *info); +CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); -/// Get the hit point for a segment query. -static inline cpVect cpSegmentQueryHitPoint(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvlerp(start, end, info.t); -} +/// Return contact information about two shapes. +CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); -/// Get the hit distance for a segment query. -static inline cpFloat cpSegmentQueryHitDist(const cpVect start, const cpVect end, const cpSegmentQueryInfo info) -{ - return cpvdist(start, end)*info.t; -} +/// The cpSpace this body is added to. +CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); -#define CP_DefineShapeStructGetter(type, member, name) \ -static inline type cpShapeGet##name(const cpShape *shape){return shape->member;} +/// The cpBody this shape is connected to. +CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); +/// Set the cpBody this shape is connected to. +/// Can only be used if the shape is not currently added to a space. +CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); -#define CP_DefineShapeStructSetter(type, member, name, activates) \ -static inline void cpShapeSet##name(cpShape *shape, type value){ \ - if(activates && shape->body) cpBodyActivate(shape->body); \ - shape->member = value; \ -} +/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. +cpFloat cpShapeGetMass(cpShape *shape); +/// Set the mass of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); -#define CP_DefineShapeStructProperty(type, member, name, activates) \ -CP_DefineShapeStructGetter(type, member, name) \ -CP_DefineShapeStructSetter(type, member, name, activates) +/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. +CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); +/// Set the density of this shape to have Chipmunk calculate mass properties for you. +CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); -CP_DefineShapeStructGetter(cpSpace*, CP_PRIVATE(space), Space) +/// Get the calculated moment of inertia for this shape. +CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); +/// Get the calculated area of this shape. +CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); +/// Get the centroid of this shape. +CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); -CP_DefineShapeStructGetter(cpBody*, body, Body) -void cpShapeSetBody(cpShape *shape, cpBody *body); +/// Get the bounding box that contains the shape given it's current position and angle. +CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); -CP_DefineShapeStructGetter(cpBB, bb, BB) -CP_DefineShapeStructProperty(cpBool, sensor, Sensor, cpTrue) -CP_DefineShapeStructProperty(cpFloat, e, Elasticity, cpFalse) -CP_DefineShapeStructProperty(cpFloat, u, Friction, cpTrue) -CP_DefineShapeStructProperty(cpVect, surface_v, SurfaceVelocity, cpTrue) -CP_DefineShapeStructProperty(cpDataPointer, data, UserData, cpFalse) -CP_DefineShapeStructProperty(cpCollisionType, collision_type, CollisionType, cpTrue) -CP_DefineShapeStructProperty(cpGroup, group, Group, cpTrue) -CP_DefineShapeStructProperty(cpLayers, layers, Layers, cpTrue) +/// Get if the shape is set to be a sensor or not. +CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); +/// Set if the shape is a sensor or not. +CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); -/// When initializing a shape, it's hash value comes from a counter. -/// Because the hash value may affect iteration order, you can reset the shape ID counter -/// when recreating a space. This will make the simulation be deterministic. -void cpResetShapeIdCounter(void); +/// Get the elasticity of this shape. +CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); +/// Set the elasticity of this shape. +CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); + +/// Get the friction of this shape. +CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); +/// Set the friction of this shape. +CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); + +/// Get the surface velocity of this shape. +CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); +/// Set the surface velocity of this shape. +CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); + +/// Get the user definable data pointer of this shape. +CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); +/// Set the user definable data pointer of this shape. +CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); + +/// Set the collision type of this shape. +CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); +/// Get the collision type of this shape. +CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); + +/// Get the collision filtering parameters of this shape. +CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); +/// Set the collision filtering parameters of this shape. +CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); -#define CP_DeclareShapeGetter(struct, type, name) type struct##Get##name(const cpShape *shape) /// @} /// @defgroup cpCircleShape cpCircleShape -/// @private -typedef struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -} cpCircleShape; - /// Allocate a circle shape. -cpCircleShape* cpCircleShapeAlloc(void); +CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); /// Initialize a circle shape. -cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); /// Allocate and initialize a circle shape. -cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); +CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); -CP_DeclareShapeGetter(cpCircleShape, cpVect, Offset); -CP_DeclareShapeGetter(cpCircleShape, cpFloat, Radius); +/// Get the offset of a circle shape. +CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); +/// Get the radius of a circle shape. +CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); /// @} /// @defgroup cpSegmentShape cpSegmentShape -/// @private -typedef struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -} cpSegmentShape; - /// Allocate a segment shape. -cpSegmentShape* cpSegmentShapeAlloc(void); +CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); /// Initialize a segment shape. -cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Allocate and initialize a segment shape. -cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); +CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); /// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); +CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, A); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, B); -CP_DeclareShapeGetter(cpSegmentShape, cpVect, Normal); -CP_DeclareShapeGetter(cpSegmentShape, cpFloat, Radius); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); +/// Get the second endpoint of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); +/// Get the normal of a segment shape. +CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); +/// Get the first endpoint of a segment shape. +CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); /// @} diff --git a/android/armeabi/include/chipmunk/cpSpace.h b/android/armeabi/include/chipmunk/cpSpace.h index 26439f76..7bbabb85 100644 --- a/android/armeabi/include/chipmunk/cpSpace.h +++ b/android/armeabi/include/chipmunk/cpSpace.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,191 +22,161 @@ /// @defgroup cpSpace cpSpace /// @{ -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); +//MARK: Definitions -/// Basic Unit of Simulation in Chipmunk -struct cpSpace { - /// Number of iterations to use in the impulse solver to solve contacts. - int iterations; - - /// Gravity to pass to rigid bodies when integrating velocity. - cpVect gravity; - - /// Damping rate expressed as the fraction of velocity bodies retain each second. - /// A value of 0.9 would mean that each body's velocity will drop 10% per second. - /// The default value is 1.0, meaning no damping is applied. - /// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. - cpFloat damping; - - /// Speed threshold for a body to be considered idle. - /// The default value of 0 means to let the space guess a good threshold based on gravity. - cpFloat idleSpeedThreshold; - - /// Time a group of bodies must remain idle in order to fall asleep. - /// Enabling sleeping also implicitly enables the the contact graph. - /// The default value of INFINITY disables the sleeping algorithm. - cpFloat sleepTimeThreshold; - - /// Amount of encouraged penetration between colliding shapes. - /// Used to reduce oscillating contacts and keep the collision cache warm. - /// Defaults to 0.1. If you have poor simulation quality, - /// increase this number as much as possible without allowing visible amounts of overlap. - cpFloat collisionSlop; - - /// Determines how fast overlapping shapes are pushed apart. - /// Expressed as a fraction of the error remaining after each second. - /// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. - cpFloat collisionBias; - - /// Number of frames that contact information should persist. - /// Defaults to 3. There is probably never a reason to change this value. - cpTimestamp collisionPersistence; - - /// Rebuild the contact graph during each step. Must be enabled to use the cpBodyEachArbiter() function. - /// Disabled by default for a small performance boost. Enabled implicitly when the sleeping feature is enabled. - cpBool enableContactGraph; - - /// User definable data pointer. - /// Generally this points to your game's controller or game state - /// class so you can access it when given a cpSpace reference in a callback. - cpDataPointer data; - - /// The designated static body for this space. - /// You can modify this body, or replace it with your own static body. - /// By default it points to a statically allocated cpBody in the cpSpace struct. - cpBody *staticBody; - - CP_PRIVATE(cpTimestamp stamp); - CP_PRIVATE(cpFloat curr_dt); +/// Collision begin event function callback type. +/// Returning false from a begin callback causes the collision to be ignored until +/// the the separate callback is called when the objects stop colliding. +typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision pre-solve event function callback type. +/// Returning false from a pre-step callback causes the collision to be ignored until the next step. +typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision post-solve event function callback type. +typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); +/// Collision separate event function callback type. +typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - CP_PRIVATE(cpArray *bodies); - CP_PRIVATE(cpArray *rousedBodies); - CP_PRIVATE(cpArray *sleepingComponents); - - CP_PRIVATE(cpSpatialIndex *staticShapes); - CP_PRIVATE(cpSpatialIndex *activeShapes); - - CP_PRIVATE(cpArray *arbiters); - CP_PRIVATE(cpContactBufferHeader *contactBuffersHead); - CP_PRIVATE(cpHashSet *cachedArbiters); - CP_PRIVATE(cpArray *pooledArbiters); - CP_PRIVATE(cpArray *constraints); - - CP_PRIVATE(cpArray *allocatedBuffers); - CP_PRIVATE(int locked); - - CP_PRIVATE(cpHashSet *collisionHandlers); - CP_PRIVATE(cpCollisionHandler defaultHandler); - - CP_PRIVATE(cpBool skipPostStep); - CP_PRIVATE(cpArray *postStepCallbacks); - - CP_PRIVATE(cpBody _staticBody); +/// Struct that holds function callback pointers to configure custom collision handling. +/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. +struct cpCollisionHandler { + /// Collision type identifier of the first shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the first argument. Read only. + const cpCollisionType typeA; + /// Collision type identifier of the second shape that this handler recognizes. + /// In the collision handler callback, the shape with this type will be the second argument. Read only. + const cpCollisionType typeB; + /// This function is called when two shapes with types that match this collision handler begin colliding. + cpCollisionBeginFunc beginFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called before the collision solver runs so that you can affect a collision's outcome. + cpCollisionPreSolveFunc preSolveFunc; + /// This function is called each step when two shapes with types that match this collision handler are colliding. + /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. + cpCollisionPostSolveFunc postSolveFunc; + /// This function is called when two shapes with types that match this collision handler stop colliding. + cpCollisionSeparateFunc separateFunc; + /// This is a user definable context pointer that is passed to all of the collision handler functions. + cpDataPointer userData; }; +// TODO: Make timestep a parameter? + + +//MARK: Memory and Initialization + /// Allocate a cpSpace. -cpSpace* cpSpaceAlloc(void); +CP_EXPORT cpSpace* cpSpaceAlloc(void); /// Initialize a cpSpace. -cpSpace* cpSpaceInit(cpSpace *space); +CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); /// Allocate and initialize a cpSpace. -cpSpace* cpSpaceNew(void); +CP_EXPORT cpSpace* cpSpaceNew(void); /// Destroy a cpSpace. -void cpSpaceDestroy(cpSpace *space); +CP_EXPORT void cpSpaceDestroy(cpSpace *space); /// Destroy and free a cpSpace. -void cpSpaceFree(cpSpace *space); +CP_EXPORT void cpSpaceFree(cpSpace *space); -#define CP_DefineSpaceStructGetter(type, member, name) \ -static inline type cpSpaceGet##name(const cpSpace *space){return space->member;} -#define CP_DefineSpaceStructSetter(type, member, name) \ -static inline void cpSpaceSet##name(cpSpace *space, type value){space->member = value;} +//MARK: Properties -#define CP_DefineSpaceStructProperty(type, member, name) \ -CP_DefineSpaceStructGetter(type, member, name) \ -CP_DefineSpaceStructSetter(type, member, name) +/// Number of iterations to use in the impulse solver to solve contacts and other constraints. +CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); +CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); -CP_DefineSpaceStructProperty(int, iterations, Iterations) -CP_DefineSpaceStructProperty(cpVect, gravity, Gravity) -CP_DefineSpaceStructProperty(cpFloat, damping, Damping) -CP_DefineSpaceStructProperty(cpFloat, idleSpeedThreshold, IdleSpeedThreshold) -CP_DefineSpaceStructProperty(cpFloat, sleepTimeThreshold, SleepTimeThreshold) -CP_DefineSpaceStructProperty(cpFloat, collisionSlop, CollisionSlop) -CP_DefineSpaceStructProperty(cpFloat, collisionBias, CollisionBias) -CP_DefineSpaceStructProperty(cpTimestamp, collisionPersistence, CollisionPersistence) -CP_DefineSpaceStructProperty(cpBool, enableContactGraph, EnableContactGraph) -CP_DefineSpaceStructProperty(cpDataPointer, data, UserData) -CP_DefineSpaceStructGetter(cpBody*, staticBody, StaticBody) -CP_DefineSpaceStructGetter(cpFloat, CP_PRIVATE(curr_dt), CurrentTimeStep) +/// Gravity to pass to rigid bodies when integrating velocity. +CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); +CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); -/// returns true from inside a callback and objects cannot be added/removed. -static inline cpBool -cpSpaceIsLocked(cpSpace *space) -{ - return space->CP_PRIVATE(locked); -} +/// Damping rate expressed as the fraction of velocity bodies retain each second. +/// A value of 0.9 would mean that each body's velocity will drop 10% per second. +/// The default value is 1.0, meaning no damping is applied. +/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. +CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); +CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); -/// Set a default collision handler for this space. -/// The default collision handler is invoked for each colliding pair of shapes -/// that isn't explicitly handled by a specific collision handler. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceSetDefaultCollisionHandler( - cpSpace *space, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Speed threshold for a body to be considered idle. +/// The default value of 0 means to let the space guess a good threshold based on gravity. +CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); -/// Set a collision handler to be used whenever the two shapes with the given collision types collide. -/// You can pass NULL for any function you don't want to implement. -void cpSpaceAddCollisionHandler( - cpSpace *space, - cpCollisionType a, cpCollisionType b, - cpCollisionBeginFunc begin, - cpCollisionPreSolveFunc preSolve, - cpCollisionPostSolveFunc postSolve, - cpCollisionSeparateFunc separate, - void *data -); +/// Time a group of bodies must remain idle in order to fall asleep. +/// Enabling sleeping also implicitly enables the the contact graph. +/// The default value of INFINITY disables the sleeping algorithm. +CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); +CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); -/// Unset a collision handler. -void cpSpaceRemoveCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Amount of encouraged penetration between colliding shapes. +/// Used to reduce oscillating contacts and keep the collision cache warm. +/// Defaults to 0.1. If you have poor simulation quality, +/// increase this number as much as possible without allowing visible amounts of overlap. +CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); + +/// Determines how fast overlapping shapes are pushed apart. +/// Expressed as a fraction of the error remaining after each second. +/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. +CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); + +/// Number of frames that contact information should persist. +/// Defaults to 3. There is probably never a reason to change this value. +CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); +CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); + +/// User definable data pointer. +/// Generally this points to your game's controller or game state +/// class so you can access it when given a cpSpace reference in a callback. +CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); +CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); + +/// The Space provided static body for a given cpSpace. +/// This is merely provided for convenience and you are not required to use it. +CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); + +/// Returns the current (or most recent) time step used with the given space. +/// Useful from callbacks if your time step is not a compile-time global. +CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); + +/// returns true from inside a callback when objects cannot be added/removed. +CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); + + +//MARK: Collision Handlers + +/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. +CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); +/// Create or return the existing collision handler for the specified pair of collision types. +/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. +CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); +/// Create or return the existing wildcard collision handler for the specified type. +CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); + + +//MARK: Add/Remove objects /// Add a collision shape to the simulation. /// If the shape is attached to a static body, it will be added as a static shape. -cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Explicity add a shape as a static shape to the simulation. -cpShape* cpSpaceAddStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); /// Add a rigid body to the simulation. -cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); /// Add a constraint to the simulation. -cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); /// Remove a collision shape from the simulation. -void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a collision shape added using cpSpaceAddStaticShape() from the simulation. -void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); /// Remove a rigid body from the simulation. -void cpSpaceRemoveBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); /// Remove a constraint from the simulation. -void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); /// Test if a collision shape has been added to the space. -cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); +CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); /// Test if a rigid body has been added to the space. -cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); +CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); /// Test if a constraint has been added to the space. -cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); +CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); -/// Convert a dynamic rogue body to a static one. -/// If the body is active, you must remove it from the space first. -void cpSpaceConvertBodyToStatic(cpSpace *space, cpBody *body); -/// Convert a body to a dynamic rogue body. -/// If you want the body to be active after the transition, you must add it to the space also. -void cpSpaceConvertBodyToDynamic(cpSpace *space, cpBody *body, cpFloat mass, cpFloat moment); +//MARK: Post-Step Callbacks /// Post Step callback function type. typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); @@ -214,70 +184,136 @@ typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); /// You can only register one callback per unique value for @c key. /// Returns true only if @c key has never been scheduled before. /// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); +CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); -/// Point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data); -/// Query the space at a point and call @c func for each shape found. -void cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the first shape found. Returns NULL if no shapes were found. -cpShape *cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group); + +//MARK: Queries + +// TODO: Queries and iterators should take a cpSpace parametery. +// TODO: They should also be abortable. /// Nearest point query callback function type. -typedef void (*cpSpaceNearestPointQueryFunc)(cpShape *shape, cpFloat distance, cpVect point, void *data); +typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); /// Query the space at a point and call @c func for each shape found. -void cpSpaceNearestPointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpSpaceNearestPointQueryFunc func, void *data); +CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); /// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -cpShape *cpSpaceNearestPointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpLayers layers, cpGroup group, cpNearestPointQueryInfo *out); +CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); /// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpFloat t, cpVect n, void *data); +typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); /// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data); +CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); /// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *out); +CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); /// Rectangle Query callback function type. typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); /// Perform a fast rectangle query on the space calling @c func for each shape found. /// Only the shape's bounding boxes are checked for overlap, not their full shape. -void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data); +CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); /// Shape query callback function type. typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); /// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); +CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); -/// Call cpBodyActivate() for any shape that is overlaps the given shape. -void cpSpaceActivateShapesTouchingShape(cpSpace *space, cpShape *shape); +//MARK: Iteration /// Space/body iterator callback function type. typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); /// Call @c func for each body in the space. -void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); /// Space/body iterator callback function type. typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); /// Space/constraint iterator callback function type. typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); /// Call @c func for each shape in the space. -void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); +CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); + + +//MARK: Indexing /// Update the collision detection info for the static shapes in the space. -void cpSpaceReindexStatic(cpSpace *space); +CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); /// Update the collision detection data for a specific shape in the space. -void cpSpaceReindexShape(cpSpace *space, cpShape *shape); +CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); /// Update the collision detection data for all shapes attached to a body. -void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); +CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); /// Switch the space to use a spatial has as it's spatial index. -void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); +CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); + + +//MARK: Time Stepping /// Step the space forward in time by @c dt. -void cpSpaceStep(cpSpace *space, cpFloat dt); +CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); + + +//MARK: Debug API + +#ifndef CP_SPACE_DISABLE_DEBUG_API + +/// Color type to use with the space debug drawing API. +typedef struct cpSpaceDebugColor { + float r, g, b, a; +} cpSpaceDebugColor; + +/// Callback type for a function that draws a filled, stroked circle. +typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a line segment. +typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that draws a thick line segment. +typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a convex polygon. +typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); +/// Callback type for a function that draws a dot. +typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); +/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. +typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); + +typedef enum cpSpaceDebugDrawFlags { + CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, + CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, + CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, +} cpSpaceDebugDrawFlags; + +/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. +typedef struct cpSpaceDebugDrawOptions { + /// Function that will be invoked to draw circles. + cpSpaceDebugDrawCircleImpl drawCircle; + /// Function that will be invoked to draw line segments. + cpSpaceDebugDrawSegmentImpl drawSegment; + /// Function that will be invoked to draw thick line segments. + cpSpaceDebugDrawFatSegmentImpl drawFatSegment; + /// Function that will be invoked to draw convex polygons. + cpSpaceDebugDrawPolygonImpl drawPolygon; + /// Function that will be invoked to draw dots. + cpSpaceDebugDrawDotImpl drawDot; + + /// Flags that request which things to draw (collision shapes, constraints, contact points). + cpSpaceDebugDrawFlags flags; + /// Outline color passed to the drawing function. + cpSpaceDebugColor shapeOutlineColor; + /// Function that decides what fill color to draw shapes using. + cpSpaceDebugDrawColorForShapeImpl colorForShape; + /// Color passed to drawing functions for constraints. + cpSpaceDebugColor constraintColor; + /// Color passed to drawing functions for collision points. + cpSpaceDebugColor collisionPointColor; + + /// User defined context pointer passed to all of the callback functions as the 'data' argument. + cpDataPointer data; +} cpSpaceDebugDrawOptions; + +/// Debug draw the current state of the space using the supplied drawing options. +CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); + +#endif /// @} diff --git a/android/armeabi/include/chipmunk/cpSpatialIndex.h b/android/armeabi/include/chipmunk/cpSpatialIndex.h index c279cad0..a386ba9a 100644 --- a/android/armeabi/include/chipmunk/cpSpatialIndex.h +++ b/android/armeabi/include/chipmunk/cpSpatialIndex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -69,48 +69,48 @@ struct cpSpatialIndex { typedef struct cpSpaceHash cpSpaceHash; /// Allocate a spatial hash. -cpSpaceHash* cpSpaceHashAlloc(void); +CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); /// Initialize a spatial hash. -cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a spatial hash. -cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Change the cell dimensions and table size of the spatial hash to tune it. /// The cell dimensions should roughly match the average size of your objects /// and the table size should be ~10 larger than the number of objects inserted. /// Some trial and error is required to find the optimum numbers for efficiency. -void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); +CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); //MARK: AABB Tree typedef struct cpBBTree cpBBTree; /// Allocate a bounding box tree. -cpBBTree* cpBBTreeAlloc(void); +CP_EXPORT cpBBTree* cpBBTreeAlloc(void); /// Initialize a bounding box tree. -cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a bounding box tree. -cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Perform a static top down optimization of the tree. -void cpBBTreeOptimize(cpSpatialIndex *index); +CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); /// Bounding box tree velocity callback function. /// This function should return an estimate for the object's velocity. typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); /// Set the velocity function for the bounding box tree to enable temporal coherence. -void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); +CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); //MARK: Single Axis Sweep typedef struct cpSweep1D cpSweep1D; /// Allocate a 1D sort and sweep broadphase. -cpSweep1D* cpSweep1DAlloc(void); +CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); /// Initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); /// Allocate and initialize a 1D sort and sweep broadphase. -cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); +CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); //MARK: Spatial Index Implementation diff --git a/android/armeabi/include/chipmunk/cpVect.h b/android/armeabi/include/chipmunk/cpVect.h index 90855e56..8ec02bdc 100644 --- a/android/armeabi/include/chipmunk/cpVect.h +++ b/android/armeabi/include/chipmunk/cpVect.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007 Scott Lembcke +/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +19,11 @@ * SOFTWARE. */ +#ifndef CHIPMUNK_VECT_H +#define CHIPMUNK_VECT_H + +#include "chipmunk_types.h" + /// @defgroup cpVect cpVect /// Chipmunk's 2D vector type along with a handy 2D vector math lib. /// @{ @@ -33,17 +38,6 @@ static inline cpVect cpv(const cpFloat x, const cpFloat y) return v; } -/// Spherical linearly interpolate between v1 and v2. -cpVect cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t); - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -cpVect cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a); - -/// Returns a string representation of v. Intended mostly for debugging purposes and not production use. -/// @attention The string points to a static local and is reset every time the function is called. -/// If you want to print more than one vector you will have to split up your printing onto separate lines. -char* cpvstr(const cpVect v); - /// Check if two vectors are equal. (Be careful when comparing floating point numbers!) static inline cpBool cpveql(const cpVect v1, const cpVect v2) { @@ -155,10 +149,30 @@ static inline cpVect cpvnormalize(const cpVect v) return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); } -/// @deprecated Just an alias for cpvnormalize() now. -static inline cpVect cpvnormalize_safe(const cpVect v) +/// Spherical linearly interpolate between v1 and v2. +static inline cpVect +cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) { - return cpvnormalize(v); + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + if(omega < 1e-3){ + // If the angle between two vectors is very small, lerp instead to avoid precision issues. + return cpvlerp(v1, v2, t); + } else { + cpFloat denom = 1.0f/cpfsin(omega); + return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); + } +} + +/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians +static inline cpVect +cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) +{ + cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); + cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); + + return cpvslerp(v1, v2, cpfmin(a, omega)/omega); } /// Clamp v to length len. @@ -197,6 +211,7 @@ static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dis /// 2x2 matrix type used for tensors and such. /// @{ +// NUKE static inline cpMat2x2 cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) { @@ -211,3 +226,5 @@ cpMat2x2Transform(cpMat2x2 m, cpVect v) } ///@} + +#endif diff --git a/android/armeabi/libchipmunk.a b/android/armeabi/libchipmunk.a index fe0d068a1a4bf63854138442e55c9216246c749c..a4938283de1c1ab9ad06368df7b047f2d3a59991 100644 GIT binary patch literal 476362 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%0DDY50DERI9`@*czmh!cxmx72-S^v>PWy%K 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�tRrqbRS(Q5fY7n72#`zr;IQQ9eiEKCEOdCF-wL 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