Home | History | Annotate | Download | only in collision
      1 %module btCollisionObject
      2 
      3 %typemap(javainterfaces) btCollisionObject %{
      4 	com.badlogic.gdx.utils.Disposable
      5 %}
      6 
      7 %rename(internalSetCollisionShape) btCollisionObject::setCollisionShape;
      8 %javamethodmodifiers btCollisionObject::setCollisionShape "private";
      9 %rename(internalGetCollisionShape) btCollisionObject::getCollisionShape;
     10 %javamethodmodifiers btCollisionObject::getCollisionShape "private";
     11 
     12 %typemap(javaout) 	btCollisionObject *, const btCollisionObject *, btCollisionObject * const & {
     13 	return btCollisionObject.getInstance($jnicall, $owner);
     14 }
     15 
     16 %typemap(javaout) 	btCollisionObject, const btCollisionObject, btCollisionObject & {
     17 	return btCollisionObject.getInstance($jnicall, $owner);
     18 }
     19 
     20 %typemap(javadirectorin) btCollisionObject *, const btCollisionObject *, btCollisionObject * const &	"btCollisionObject.getInstance($1, false)"
     21 
     22 %typemap(javacode) btCollisionObject %{
     23 	/** Provides direct access to the instances this wrapper managed. */
     24 	public final static com.badlogic.gdx.utils.LongMap<btCollisionObject> instances = new com.badlogic.gdx.utils.LongMap<btCollisionObject>();
     25 
     26 	/** @return The existing instance for the specified pointer, or null if the instance doesn't exist */
     27 	public static btCollisionObject getInstance(final long swigCPtr) {
     28 		return swigCPtr == 0 ? null : instances.get(swigCPtr);
     29 	}
     30 
     31 	/** @return The existing instance for the specified pointer, or a newly created instance if the instance didn't exist */
     32 	public static btCollisionObject getInstance(final long swigCPtr, boolean owner) {
     33 		if (swigCPtr == 0)
     34 			return null;
     35 		btCollisionObject result = instances.get(swigCPtr);
     36 		if (result == null)
     37 			result = new btCollisionObject(swigCPtr, owner);
     38 		return result;
     39 	}
     40 
     41 	/** Add the instance to the managed instances.
     42 	 * You should avoid using this method. This method is intended for internal purposes only. */
     43 	public static void addInstance(final btCollisionObject obj) {
     44 		instances.put(getCPtr(obj), obj);
     45 	}
     46 
     47 	/** Remove the instance to the managed instances.
     48 	 * Be careful using this method. This method is intended for internal purposes only. */
     49 	public static void removeInstance(final btCollisionObject obj) {
     50 		instances.remove(getCPtr(obj));
     51 	}
     52 
     53 	protected GdxCollisionObjectBridge gdxBridge;
     54 	protected int userValue;
     55 	protected int contactCallbackFlag = 1;
     56 	protected int contactCallbackFilter;
     57 	protected btCollisionShape collisionShape;
     58 
     59 	/** User definable data, not used by Bullet itself. */
     60 	public Object userData;
     61 
     62 	@Override
     63 	protected void construct() {
     64 		super.construct();
     65 		gdxBridge = new GdxCollisionObjectBridge();
     66 		internalSetGdxBridge(gdxBridge);
     67 		addInstance(this);
     68 	}
     69 
     70 	@Override
     71 	public void dispose() {
     72 		if (swigCPtr != 0)
     73 			removeInstance(this);
     74 		if (gdxBridge != null)
     75 			gdxBridge.dispose();
     76 		gdxBridge = null;
     77 		if (collisionShape != null)
     78 			collisionShape.release();
     79 		collisionShape = null;
     80 		super.dispose();
     81 	}
     82 
     83 	/** @return A user definable value set using {@link #setUserValue(int)}, intended to quickly identify the collision object */
     84 	public int getUserValue() {
     85 		return userValue;
     86 	}
     87 
     88 	/** @param value A user definable value which allows you to quickly identify this collision object. Some frequently called
     89 	 * methods rather return this value than the collision object itself to minimize JNI overhead. */
     90 	public void setUserValue(int value) {
     91 		gdxBridge.setUserValue(userValue = value);
     92 	}
     93 
     94 	/** @return The flag (defaults to 1) used to filter contact callbacks with this object */
     95 	public int getContactCallbackFlag() {
     96 		return contactCallbackFlag;
     97 	}
     98 
     99 	/** @param flag The new flag used to filter contact callbacks with this object */
    100 	public void setContactCallbackFlag(int flag) {
    101 		gdxBridge.setContactCallbackFlag(contactCallbackFlag = flag);
    102 	}
    103 
    104 	/** @return The filter (default to 0) that is used to match the flag of the other object for a contact callback to be triggered */
    105 	public int getContactCallbackFilter() {
    106 		return contactCallbackFilter;
    107 	}
    108 
    109 	/** @param filter The new filter that is used to match the flag of the other object for a contact callback to be triggered */
    110 	public void setContactCallbackFilter(int filter) {
    111 		gdxBridge.setContactCallbackFilter(contactCallbackFilter = filter);
    112 	}
    113 
    114 	public void setCollisionShape(btCollisionShape shape) {
    115 		refCollisionShape(shape);
    116 		internalSetCollisionShape(shape);
    117 	}
    118 
    119 	protected void refCollisionShape(btCollisionShape shape) {
    120 		if (collisionShape == shape)
    121 			return;
    122 		if (collisionShape != null)
    123 			collisionShape.release();
    124 		collisionShape = shape;
    125 		collisionShape.obtain();
    126 	}
    127 
    128 	public btCollisionShape getCollisionShape() {
    129 		return collisionShape;
    130 	}
    131 %}
    132 
    133 %{
    134 #include <BulletCollision/CollisionDispatch/btCollisionObject.h>
    135 #include <gdx/collision/GdxCollisionObjectBridge.h>
    136 %}
    137 %include "BulletCollision/CollisionDispatch/btCollisionObject.h"
    138 %include "gdx/collision/GdxCollisionObjectBridge.h"
    139 
    140 %javamethodmodifiers btCollisionObject::internalSetGdxBridge "private";
    141 %javamethodmodifiers btCollisionObject::internalGetGdxBridge "private";
    142 
    143 %extend btCollisionObject {
    144 	void internalSetGdxBridge(GdxCollisionObjectBridge *bridge) {
    145 		$self->setUserPointer(bridge);
    146 	}
    147 
    148 	GdxCollisionObjectBridge *internalGetGdxBridge() {
    149 		return (GdxCollisionObjectBridge *)($self->getUserPointer());
    150 	}
    151 
    152 	void getAnisotropicFriction(btVector3 & out) {
    153 		out = $self->getAnisotropicFriction();
    154 	}
    155 
    156     void getWorldTransform(btTransform & out) {
    157 		out = $self->getWorldTransform();
    158 	}
    159 
    160     void getInterpolationWorldTransform(btTransform & out) {
    161 		out = $self->getInterpolationWorldTransform();
    162 	}
    163 
    164 	void getInterpolationLinearVelocity(btVector3 & out) {
    165 		out = $self->getInterpolationLinearVelocity();
    166 	}
    167 
    168 	void getInterpolationAngularVelocity(btVector3 & out) {
    169 		out = $self->getInterpolationAngularVelocity();
    170 	}
    171 };