All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.badlogic.gdx.physics.box2d.Joint Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright 2011 See AUTHORS file.
 * 
 * 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 org.jbox2d.common.Vec2;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.JointDef.JointType;

public abstract class Joint {
	World world;
	org.jbox2d.dynamics.joints.Joint joint;
	Object userData;
	JointEdge jointEdgeA;
	JointEdge jointEdgeB;

	/** Constructs a new joint
	 * @param addr the address of the joint */
	protected Joint (World world, org.jbox2d.dynamics.joints.Joint joint) {
		this.world = world;
		this.joint = joint;
	}

	/** Get the type of the concrete joint. */
	public JointType getType () {
		org.jbox2d.dynamics.joints.JointType type2 = joint.getType();
		if (type2 == org.jbox2d.dynamics.joints.JointType.DISTANCE) return JointType.DistanceJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.FRICTION) return JointType.FrictionJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.GEAR) return JointType.GearJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.MOUSE) return JointType.MouseJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.PRISMATIC) return JointType.PrismaticJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.PULLEY) return JointType.PulleyJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.REVOLUTE) return JointType.RevoluteJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.ROPE) return JointType.RopeJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.UNKNOWN) return JointType.Unknown;
		if (type2 == org.jbox2d.dynamics.joints.JointType.WELD) return JointType.WeldJoint;
		if (type2 == org.jbox2d.dynamics.joints.JointType.WHEEL) return JointType.WheelJoint;
		return JointType.Unknown;
	}

	/** Get the first body attached to this joint. */
	public Body getBodyA () {
		return world.bodies.get(joint.getBodyA());
	}

	/** Get the second body attached to this joint. */
	public Body getBodyB () {
		return world.bodies.get(joint.getBodyB());
	}

	/** Get the anchor point on bodyA in world coordinates. */
	final Vec2 tmp = new Vec2();
	private final Vector2 anchorA = new Vector2();

	public Vector2 getAnchorA () {
		joint.getAnchorA(tmp);
		return anchorA.set(tmp.x, tmp.y);
	}

	/** Get the anchor point on bodyB in world coordinates. */
	private final Vector2 anchorB = new Vector2();

	public Vector2 getAnchorB () {
		joint.getAnchorB(tmp);
		return anchorB.set(tmp.x, tmp.y);
	}

	public boolean getCollideConnected () {
		return joint.getCollideConnected();
	}

	/** Get the reaction force on body2 at the joint anchor in Newtons. */
	private final Vector2 reactionForce = new Vector2();

	public Vector2 getReactionForce (float inv_dt) {
		joint.getReactionForce(inv_dt, tmp);
		return reactionForce.set(tmp.x, tmp.y);
	}

	/** Get the reaction torque on body2 in N*m. */
	public float getReactionTorque (float inv_dt) {
		return joint.getReactionTorque(inv_dt);
	}

	/** Get the user data */
	public Object getUserData () {
		return userData;
	}

	/** Set the user data */
	public void setUserData (Object userData) {
		this.userData = userData;
	}

	/** Short-cut function to determine if either body is inactive. */
	public boolean isActive () {
		return joint.isActive();
	}

	public org.jbox2d.dynamics.joints.Joint getJBox2DJoint () {
		return joint;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy