Android Open Source - flingbox Collider






From Project

Back to project page flingbox.

License

The source code is released under:

GNU General Public License

If you think the Android project flingbox 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

/*
 *  Flingbox - An OpenSource physics sandbox for Google's Android
 *  Copyright (C) 2009  Jon Ander Pealba & Endika Gutirrez
 */*w  w  w .java 2 s. c  o m*/
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package edu.eside.flingbox.physics.collisions;

import edu.eside.flingbox.math.Vector2D;
import edu.eside.flingbox.physics.PhysicBody;
import edu.eside.flingbox.physics.PhysicBody.OnMovementListener;
import edu.eside.flingbox.utils.PositionComparator.Positionable;

/**
 * Abstract collision manager for any object.
 */
public abstract class Collider implements OnMovementListener, Positionable {

    /** bounding circle radius, needed to discartd quickly collisions */
    protected float mRadius;

    /** Objects position. needs to be updated */
    protected final Vector2D mPosition;
    protected float mAngle = 0f;

    protected final PhysicBody mPhysicBody;

    /**
     * Local constructor for any collider.
     * 
     * @param listener
     *            Collision listener
     */
    public Collider(final PhysicBody physicBody) {
        mPosition = new Vector2D();
        mPhysicBody = physicBody;
    }

    /**
     * Checks if objects can collide
     * 
     * @param collider
     *            other objects collider.
     * @return true if objects can collide
     */
    public abstract Contact[] checkContacts(final Collider collider);

    /**
     * @return true if there are a chance of collision
     */
    public boolean canContact(final Collider collider) {
        /* Start checking bounding circle */
        final float radiusLength = mRadius + collider.mRadius;
        final float thisX = mPosition.i, thisY = mPosition.j, otherX = collider.mPosition.i, otherY = collider.mPosition.j;
        final float distanceSqr = (thisX - otherX) * (thisX - otherX)
                + (thisY - otherY) * (thisY - otherY);

        if (distanceSqr > (radiusLength * radiusLength))
            return false; // No collision possible

        return true;

    }

    /**
     * Called when a movement occurs
     */
    public void onMovement(final Vector2D newPosition, float newAngle) {
        mPosition.set(newPosition);
        mAngle = newAngle;
    }

    public Vector2D getPosition() {
        return mPosition;
    }

    /**
     * @return Bounding circle's radius
     */
    public float getBoundingCircle() {
        return mRadius;
    }

    /**
     * @return associated PhysicBody
     */
    public PhysicBody getAssociatedBody() {
        return mPhysicBody;
    }
}




Java Source Code List

edu.eside.flingbox.BodySettingsDialog.java
edu.eside.flingbox.FlingboxActivity.java
edu.eside.flingbox.PreferencesActivity.java
edu.eside.flingbox.Preferences.java
edu.eside.flingbox.bodies.Body.java
edu.eside.flingbox.bodies.Polygon.java
edu.eside.flingbox.graphics.RenderBody.java
edu.eside.flingbox.graphics.RenderCamera.java
edu.eside.flingbox.graphics.RenderPolygon.java
edu.eside.flingbox.graphics.SceneRenderer.java
edu.eside.flingbox.input.SceneGestureDetector.java
edu.eside.flingbox.math.Intersect.java
edu.eside.flingbox.math.Matrix22.java
edu.eside.flingbox.math.PolygonUtils.java
edu.eside.flingbox.math.Vector2D.java
edu.eside.flingbox.physics.PhysicAtomicBody.java
edu.eside.flingbox.physics.PhysicBody.java
edu.eside.flingbox.physics.PhysicPolygon.java
edu.eside.flingbox.physics.ScenePhysics.java
edu.eside.flingbox.physics.collisions.Arbiter.java
edu.eside.flingbox.physics.collisions.ColliderPolygon.java
edu.eside.flingbox.physics.collisions.Collider.java
edu.eside.flingbox.physics.collisions.ContactSolver.java
edu.eside.flingbox.physics.collisions.Contact.java
edu.eside.flingbox.physics.gravity.GravitySource.java
edu.eside.flingbox.scene.DrawingBody.java
edu.eside.flingbox.scene.DrawingPolygon.java
edu.eside.flingbox.scene.Scene.java
edu.eside.flingbox.utils.PositionComparator.java
edu.eside.flingbox.xml.InvalidXmlException.java
edu.eside.flingbox.xml.XmlExporter.java
edu.eside.flingbox.xml.XmlImporter.java