Android Open Source - gameengine Contact






From Project

Back to project page gameengine.

License

The source code is released under:

Apache License

If you think the Android project gameengine listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*******************************************************************************
 * Copyright 2011 See AUTHORS file.//from  www  . ja va  2s  .  co m
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

package com.badlogic.gdx.physics.box2d;

import com.badlogic.gdx.math.Vector2;

/**
 * The class manages contact between two shapes. A contact exists for each
 * overlapping AABB in the broad-phase (except if filtered). Therefore a contact
 * object may exist that has no contact points.
 * 
 * @author mzechner
 */
public class Contact {
    /*
     * JNI #include <Box2D/Box2D.h>
     */

    /** the address **/
    protected long addr;

    /** the world **/
    protected World world;

    /** the world manifold **/
    protected final WorldManifold worldManifold = new WorldManifold();

    protected Contact(World world, long addr) {
        this.addr = addr;
        this.world = world;
    }

    /** Get the world manifold. */
    private final float[] tmp = new float[6];

    public WorldManifold getWorldManifold() {
        int numContactPoints = jniGetWorldManifold(addr, tmp);

        worldManifold.numContactPoints = numContactPoints;
        worldManifold.normal.set(tmp[0], tmp[1]);
        for (int i = 0; i < numContactPoints; i++) {
            Vector2 point = worldManifold.points[i];
            point.x = tmp[2 + i * 2];
            point.y = tmp[2 + i * 2 + 1];
        }

        return worldManifold;
    }

    private native int jniGetWorldManifold(long addr, float[] tmp); /*
                                                                     * b2Contact*
                                                                     * contact =
                                                                     * (
                                                                     * b2Contact
                                                                     * *)addr;
                                                                     * b2WorldManifold
                                                                     * manifold;
                                                                     * contact->
                                                                     * GetWorldManifold
                                                                     * (
                                                                     * &manifold
                                                                     * ); int
                                                                     * numPoints
                                                                     * =
                                                                     * contact-
                                                                     * >GetManifold
                                                                     * (
                                                                     * )->pointCount
                                                                     * ;
                                                                     * 
                                                                     * tmp[0] =
                                                                     * manifold
                                                                     * .normal
                                                                     * .x;
                                                                     * tmp[1] =
                                                                     * manifold
                                                                     * .normal
                                                                     * .y;
                                                                     * 
                                                                     * for( int
                                                                     * i = 0; i
                                                                     * <
                                                                     * numPoints
                                                                     * ; i++ ) {
                                                                     * tmp[2 +
                                                                     * i*2] =
                                                                     * manifold
                                                                     * .points
                                                                     * [i].x;
                                                                     * tmp[2 +
                                                                     * i*2+1] =
                                                                     * manifold
                                                                     * .points
                                                                     * [i].y; }
                                                                     * 
                                                                     * return
                                                                     * numPoints
                                                                     * ;
                                                                     */

    public boolean isTouching() {
        return jniIsTouching(addr);
    }

    private native boolean jniIsTouching(long addr); /*
                                                      * b2Contact* contact =
                                                      * (b2Contact*)addr; return
                                                      * contact->IsTouching();
                                                      */

    /**
     * Enable/disable this contact. This can be used inside the pre-solve
     * contact listener. The contact is only disabled for the current time step
     * (or sub-step in continuous collisions).
     */
    public void setEnabled(boolean flag) {
        jniSetEnabled(addr, flag);
    }

    private native void jniSetEnabled(long addr, boolean flag); /*
                                                                 * b2Contact*
                                                                 * contact =
                                                                 * (b2Contact
                                                                 * *)addr;
                                                                 * contact
                                                                 * ->SetEnabled
                                                                 * (flag);
                                                                 */

    /** Has this contact been disabled? */
    public boolean isEnabled() {
        return jniIsEnabled(addr);
    }

    private native boolean jniIsEnabled(long addr); /*
                                                     * b2Contact* contact =
                                                     * (b2Contact*)addr; return
                                                     * contact->IsEnabled();
                                                     */

    /** Get the first fixture in this contact. */
    public Fixture getFixtureA() {
        return world.fixtures.get(jniGetFixtureA(addr));
    }

    private native long jniGetFixtureA(long addr); /*
                                                    * b2Contact* contact =
                                                    * (b2Contact*)addr; return
                                                    * (jlong
                                                    * )contact->GetFixtureA();
                                                    */

    /** Get the second fixture in this contact. */
    public Fixture getFixtureB() {
        return world.fixtures.get(jniGetFixtureB(addr));
    }

    private native long jniGetFixtureB(long addr); /*
                                                    * b2Contact* contact =
                                                    * (b2Contact*)addr; return
                                                    * (jlong
                                                    * )contact->GetFixtureB();
                                                    */

    /** Get the child primitive index for fixture A. */
    public int getChildIndexA() {
        return jniGetChildIndexA(addr);
    }

    private native int jniGetChildIndexA(long addr); /*
                                                      * b2Contact* contact =
                                                      * (b2Contact*)addr; return
                                                      * contact
                                                      * ->GetChildIndexA();
                                                      */

    /** Get the child primitive index for fixture B. */
    public int getChildIndexB() {
        return jniGetChildIndexB(addr);
    }

    private native int jniGetChildIndexB(long addr); /*
                                                      * b2Contact* contact =
                                                      * (b2Contact*)addr; return
                                                      * contact
                                                      * ->GetChildIndexB();
                                                      */

    /**
     * Override the default friction mixture. You can call this in
     * b2ContactListener::PreSolve. This value persists until set or reset.
     */
    public void setFriction(float friction) {
        jniSetFriction(addr, friction);
    }

    private native void jniSetFriction(long addr, float friction); /*
                                                                    * b2Contact*
                                                                    * contact =
                                                                    * (
                                                                    * b2Contact*
                                                                    * )addr;
                                                                    * contact
                                                                    * ->SetFriction
                                                                    * (
                                                                    * friction);
                                                                    */

    /** Get the friction. */
    public float getFriction() {
        return jniGetFriction(addr);
    }

    private native float jniGetFriction(long addr); /*
                                                     * b2Contact* contact =
                                                     * (b2Contact*)addr; return
                                                     * contact->GetFriction();
                                                     */

    /** Reset the friction mixture to the default value. */
    public void resetFriction() {
        jniResetFriction(addr);
    }

    private native void jniResetFriction(long addr); /*
                                                      * b2Contact* contact =
                                                      * (b2Contact*)addr;
                                                      * contact
                                                      * ->ResetFriction();
                                                      */

    /**
     * Override the default restitution mixture. You can call this in
     * b2ContactListener::PreSolve. The value persists until you set or reset.
     */
    public void setRestitution(float restitution) {
        jniSetRestitution(addr, restitution);
    }

    private native void jniSetRestitution(long addr, float restitution); /*
                                                                          * b2Contact
                                                                          * *
                                                                          * contact
                                                                          * = (
                                                                          * b2Contact
                                                                          * *
                                                                          * )addr
                                                                          * ;
                                                                          * contact
                                                                          * ->
                                                                          * SetRestitution
                                                                          * (
                                                                          * restitution
                                                                          * );
                                                                          */

    /** Get the restitution. */
    public float getRestitution() {
        return jniGetRestitution(addr);
    }

    private native float jniGetRestitution(long addr); /*
                                                        * b2Contact* contact =
                                                        * (b2Contact*)addr;
                                                        * return
                                                        * contact->GetRestitution
                                                        * ();
                                                        */

    /** Reset the restitution to the default value. */
    public void ResetRestitution() {
        jniResetRestitution(addr);
    }

    private native void jniResetRestitution(long addr); /*
                                                         * b2Contact* contact =
                                                         * (b2Contact*)addr;
                                                         * contact
                                                         * ->ResetRestitution();
                                                         */
}




Java Source Code List

com.badlogic.gdx.math.MathUtils.java
com.badlogic.gdx.math.Matrix3.java
com.badlogic.gdx.math.Matrix4.java
com.badlogic.gdx.math.Quaternion.java
com.badlogic.gdx.math.Vector2.java
com.badlogic.gdx.math.Vector3.java
com.badlogic.gdx.physics.box2d.BodyDef.java
com.badlogic.gdx.physics.box2d.Body.java
com.badlogic.gdx.physics.box2d.ChainShape.java
com.badlogic.gdx.physics.box2d.CircleShape.java
com.badlogic.gdx.physics.box2d.ContactFilter.java
com.badlogic.gdx.physics.box2d.ContactImpulse.java
com.badlogic.gdx.physics.box2d.ContactListener.java
com.badlogic.gdx.physics.box2d.Contact.java
com.badlogic.gdx.physics.box2d.DestructionListener.java
com.badlogic.gdx.physics.box2d.EdgeShape.java
com.badlogic.gdx.physics.box2d.Filter.java
com.badlogic.gdx.physics.box2d.FixtureDef.java
com.badlogic.gdx.physics.box2d.Fixture.java
com.badlogic.gdx.physics.box2d.JointDef.java
com.badlogic.gdx.physics.box2d.JointEdge.java
com.badlogic.gdx.physics.box2d.Joint.java
com.badlogic.gdx.physics.box2d.Manifold.java
com.badlogic.gdx.physics.box2d.MassData.java
com.badlogic.gdx.physics.box2d.PolygonShape.java
com.badlogic.gdx.physics.box2d.QueryCallback.java
com.badlogic.gdx.physics.box2d.RayCastCallback.java
com.badlogic.gdx.physics.box2d.Shape.java
com.badlogic.gdx.physics.box2d.Transform.java
com.badlogic.gdx.physics.box2d.WorldManifold.java
com.badlogic.gdx.physics.box2d.World.java
com.badlogic.gdx.physics.box2d.joints.DistanceJointDef.java
com.badlogic.gdx.physics.box2d.joints.DistanceJoint.java
com.badlogic.gdx.physics.box2d.joints.FrictionJointDef.java
com.badlogic.gdx.physics.box2d.joints.FrictionJoint.java
com.badlogic.gdx.physics.box2d.joints.GearJointDef.java
com.badlogic.gdx.physics.box2d.joints.GearJoint.java
com.badlogic.gdx.physics.box2d.joints.MouseJointDef.java
com.badlogic.gdx.physics.box2d.joints.MouseJoint.java
com.badlogic.gdx.physics.box2d.joints.PrismaticJointDef.java
com.badlogic.gdx.physics.box2d.joints.PrismaticJoint.java
com.badlogic.gdx.physics.box2d.joints.PulleyJointDef.java
com.badlogic.gdx.physics.box2d.joints.PulleyJoint.java
com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef.java
com.badlogic.gdx.physics.box2d.joints.RevoluteJoint.java
com.badlogic.gdx.physics.box2d.joints.RopeJointDef.java
com.badlogic.gdx.physics.box2d.joints.RopeJoint.java
com.badlogic.gdx.physics.box2d.joints.WeldJointDef.java
com.badlogic.gdx.physics.box2d.joints.WeldJoint.java
com.badlogic.gdx.physics.box2d.joints.WheelJointDef.java
com.badlogic.gdx.physics.box2d.joints.WheelJoint.java
com.badlogic.gdx.utils.Array.java
com.badlogic.gdx.utils.ComparableTimSort.java
com.badlogic.gdx.utils.Disposable.java
com.badlogic.gdx.utils.GdxRuntimeException.java
com.badlogic.gdx.utils.LongArray.java
com.badlogic.gdx.utils.LongMap.java
com.badlogic.gdx.utils.NumberUtils.java
com.badlogic.gdx.utils.Pool.java
com.badlogic.gdx.utils.Sort.java
com.badlogic.gdx.utils.StringBuilder.java
com.badlogic.gdx.utils.TimSort.java
com.garrapeta.MathUtils.java
com.garrapeta.gameengine.Actor.java
com.garrapeta.gameengine.AsyncGameMessage.java
com.garrapeta.gameengine.BitmapManager.java
com.garrapeta.gameengine.Box2DActor.java
com.garrapeta.gameengine.Box2DWorld.java
com.garrapeta.gameengine.GameMessage.java
com.garrapeta.gameengine.GameView.java
com.garrapeta.gameengine.GameWorld.java
com.garrapeta.gameengine.ShapeDrawer.java
com.garrapeta.gameengine.SyncGameMessage.java
com.garrapeta.gameengine.Viewport.java
com.garrapeta.gameengine.actor.Box2DAtomicActor.java
com.garrapeta.gameengine.actor.Box2DCircleActor.java
com.garrapeta.gameengine.actor.Box2DEdgeActor.java
com.garrapeta.gameengine.actor.Box2DLoopActor.java
com.garrapeta.gameengine.actor.Box2DOpenChainActor.java
com.garrapeta.gameengine.actor.Box2DPolygonActor.java
com.garrapeta.gameengine.actor.IAtomicActor.java
com.garrapeta.gameengine.actor.SimpleActor.java
com.garrapeta.gameengine.module.LevelActionsModule.java
com.garrapeta.gameengine.module.LoadedLevelActionsModule.java
com.garrapeta.gameengine.module.SoundModule.java
com.garrapeta.gameengine.module.VibrationModule.java
com.garrapeta.gameengine.utils.IOUtils.java
com.garrapeta.gameengine.utils.LogX.java
com.garrapeta.gameengine.utils.PhysicsUtils.java
com.garrapeta.gameengine.utils.Pool.java