Android Open Source - gameengine Box2 D Actor






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

package com.garrapeta.gameengine;
/*from w ww  .j  a  v a2s  . c  o  m*/
import java.util.ArrayList;

import android.graphics.Canvas;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactImpulse;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.Joint;
import com.badlogic.gdx.physics.box2d.Manifold;
import com.badlogic.gdx.physics.box2d.Shape;

/**
 * Actor de un mundo fsico Box2D
 * 
 * @author GaRRaPeTa
 */
public abstract class Box2DActor<T extends Box2DWorld> extends Actor<T> {

    // --------------------------------------------------- Variables
    /**
     * Cuerpos del actor
     */
    protected ArrayList<Body> mBodies;

    /**
     * Joints del actor
     */
    protected ArrayList<Joint> mJoints;

    // --------------------------------------------------- Constructor

    /**
     * @param world
     * @param worldPos
     *            , posicin en el mundo, en unidades del mundo
     */
    public Box2DActor(T world) {
        this(world, 0);
    }

    /**
     * @param world
     * @param worldPos
     *            , posicin en el mundo, en unidades del mundo
     */
    public Box2DActor(T world, int zIndex) {
        super(world, zIndex);
    }

    // ------------------------------------------------- mtodos propios

    public float getMass() {
        float mass = 0;

        for (int i = 0; i < mBodies.size(); i++) {
            mass += mBodies.get(i)
                           .getMass();
        }

        return mass;
    }

    /**
     * Callback invocado cuando el actor empieza a ser contactado por otro actor
     * 
     * @param thisBody
     *            body de este actor que ha contactado
     * @param otherBody
     *            body del otro actor que ha contactado
     * @param contact
     */
    public void onBeginContact(Body thisBody, Box2DActor<T> other, Body otherBody, Contact contact) {
    }

    /**
     * @param bodyA
     * @param actorB
     * @param bodyB
     * @param contact
     * @param oldManifold
     */
    public void onPreSolveContact(Body bodyA, Box2DActor<T> actorB, Body bodyB, Contact contact, Manifold oldManifold) {
    }

    /**
     * @param bodyA
     * @param actorB
     * @param bodyB
     * @param contact
     * @param impulse
     */
    public void onPostSolveContact(Body bodyA, Box2DActor<T> actorB, Body bodyB, Contact contact, ContactImpulse impulse) {
    }

    /**
     * Callback invocado cuando el actor termina de ser contactado por otro
     * actor
     * 
     * @param contact
     * @param thisBody
     *            body de este actor que ha contactado
     * @param otherBody
     *            body del otro actor que ha contactado
     */
    public void onEndContact(Body bodyA, Box2DActor<T> actorB, Body bodyB, Contact contact) {
    }

    // --------------------------------------------------- mtodos de Actor

    @Override
    public void draw(Canvas canvas) {
        drawBodiesShapes(canvas);
    }

    public void processFrame(float gameTimeStep) {
    }

    /**
     * Pinta las shapes de este objeto usando los shapedrawers declarados
     * 
     * @param canvas
     */
    public void drawBodiesShapes(Canvas canvas) {
        if (mBodies != null) {
            int size = mBodies.size();
            for (int i = 0; i < size; i++) {
                Body body = mBodies.get(i);
                for (Fixture fixture : body.getFixtureList()) {
                    Vector2 worldPos = body.getWorldCenter();
                    canvas.save();
                    float screenPositionX = getWorld().mViewport.worldToScreenX(worldPos.x);
                    float screenPositionY = getWorld().mViewport.worldToScreenY(worldPos.y);
                    canvas.translate(screenPositionX, screenPositionY);
                    canvas.rotate(-(float) Math.toDegrees(body.getAngle()));
                    ShapeDrawer.draw(canvas, getWorld().mViewport, fixture.getShape());
                    canvas.restore();
                }
            }
        }
    }

    public void addBody(Body body) {
        if (mBodies == null) {
            mBodies = new ArrayList<Body>();
        }

        // si este body pertenecn a otro actor, se le quita como body
        @SuppressWarnings("unchecked")
        Box2DActor<T> oldActor = (Box2DActor<T>) body.getUserData();
        if (oldActor != null) {
            oldActor.removeBody(body);
        }

        // se pone el body en este actor
        mBodies.add(body);
    }

    public void removeBody(Body body) {
        if (mBodies != null) {
            mBodies.remove(body);
        }
        body.setUserData(null);
    }

    public void addJoint(Joint joint) {
        if (mJoints == null) {
            mJoints = new ArrayList<Joint>();
        }
        mJoints.add(joint);
    }

    public void removeJoint(Joint joint) {
        if (mJoints != null) {
            mJoints.remove(joint);
        }
    }

    public ArrayList<Body> getBodies() {
        return mBodies;
    }

    public ArrayList<Shape> getShapes() {
        ArrayList<Shape> shapes = new ArrayList<Shape>();

        int l0 = mBodies.size();
        for (int i = 0; i < l0; i++) {
            Body b = mBodies.get(i);

            ArrayList<Fixture> fixtures = b.getFixtureList();

            int l1 = fixtures.size();
            for (int j = 0; j < l1; j++) {
                shapes.add(fixtures.get(j)
                                   .getShape());
            }
        }

        return shapes;
    }

    @Override
    void doOnRemovedFromWorld() {
        super.doOnRemovedFromWorld();
        if (mJoints != null) {
            int l = mJoints.size();
            for (int i = l - 1; i >= 0; i--) {
                getWorld().destroyJoint(this, mJoints.get(i));
            }
            mJoints.clear();
            mJoints = null;
        }

        if (mBodies != null) {
            int l = mBodies.size();
            for (int i = l - 1; i >= 0; i--) {
                getWorld().destroyBody(this, mBodies.get(i));
            }
            mBodies.clear();
            mBodies = null;
        }
    }

}




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