/*
|
* Java port of Bullet (c) 2008 Martin Dvorak <jezek2@advel.cz>
|
*
|
* Bullet Continuous Collision Detection and Physics Library
|
* Copyright (c) 2003-2008 Erwin Coumans http://www.bulletphysics.com/
|
*
|
* This software is provided 'as-is', without any express or implied warranty.
|
* In no event will the authors be held liable for any damages arising from
|
* the use of this software.
|
*
|
* Permission is granted to anyone to use this software for any purpose,
|
* including commercial applications, and to alter it and redistribute it
|
* freely, subject to the following restrictions:
|
*
|
* 1. The origin of this software must not be misrepresented; you must not
|
* claim that you wrote the original software. If you use this software
|
* in a product, an acknowledgment in the product documentation would be
|
* appreciated but is not required.
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
* misrepresented as being the original software.
|
* 3. This notice may not be removed or altered from any source distribution.
|
*/
|
|
package com.bulletphysics.dynamics;
|
|
import com.bulletphysics.collision.broadphase.BroadphaseInterface;
|
import com.bulletphysics.collision.broadphase.Dispatcher;
|
import com.bulletphysics.collision.dispatch.CollisionConfiguration;
|
import com.bulletphysics.collision.dispatch.CollisionWorld;
|
import com.bulletphysics.dynamics.constraintsolver.ConstraintSolver;
|
import com.bulletphysics.dynamics.constraintsolver.ContactSolverInfo;
|
import com.bulletphysics.dynamics.constraintsolver.TypedConstraint;
|
import com.bulletphysics.dynamics.vehicle.RaycastVehicle;
|
import javax.vecmath.Vector3f;
|
|
/**
|
* DynamicsWorld is the interface class for several dynamics implementation,
|
* basic, discrete, parallel, and continuous etc.
|
*
|
* @author jezek2
|
*/
|
public abstract class DynamicsWorld extends CollisionWorld {
|
|
protected InternalTickCallback internalTickCallback;
|
protected Object worldUserInfo;
|
|
protected final ContactSolverInfo solverInfo = new ContactSolverInfo();
|
|
public DynamicsWorld(Dispatcher dispatcher, BroadphaseInterface broadphasePairCache, CollisionConfiguration collisionConfiguration) {
|
super(dispatcher, broadphasePairCache, collisionConfiguration);
|
}
|
|
public final int stepSimulation(float timeStep) {
|
return stepSimulation(timeStep, 1, 1f / 60f);
|
}
|
|
public final int stepSimulation(float timeStep, int maxSubSteps) {
|
return stepSimulation(timeStep, maxSubSteps, 1f / 60f);
|
}
|
|
/**
|
* Proceeds the simulation over 'timeStep', units in preferably in seconds.<p>
|
*
|
* By default, Bullet will subdivide the timestep in constant substeps of each
|
* 'fixedTimeStep'.<p>
|
*
|
* In order to keep the simulation real-time, the maximum number of substeps can
|
* be clamped to 'maxSubSteps'.<p>
|
*
|
* You can disable subdividing the timestep/substepping by passing maxSubSteps=0
|
* as second argument to stepSimulation, but in that case you have to keep the
|
* timeStep constant.
|
*/
|
public abstract int stepSimulation(float timeStep, int maxSubSteps, float fixedTimeStep);
|
|
public abstract void debugDrawWorld();
|
|
public final void addConstraint(TypedConstraint constraint) {
|
addConstraint(constraint, false);
|
}
|
|
public void addConstraint(TypedConstraint constraint, boolean disableCollisionsBetweenLinkedBodies) {
|
}
|
|
public void removeConstraint(TypedConstraint constraint) {
|
}
|
|
public void addAction(ActionInterface action) {
|
}
|
|
public void removeAction(ActionInterface action) {
|
}
|
|
public void addVehicle(RaycastVehicle vehicle) {
|
}
|
|
public void removeVehicle(RaycastVehicle vehicle) {
|
}
|
|
/**
|
* Once a rigidbody is added to the dynamics world, it will get this gravity assigned.
|
* Existing rigidbodies in the world get gravity assigned too, during this method.
|
*/
|
public abstract void setGravity(Vector3f gravity);
|
|
public abstract Vector3f getGravity(Vector3f out);
|
|
public abstract void addRigidBody(RigidBody body);
|
|
public abstract void removeRigidBody(RigidBody body);
|
|
public abstract void setConstraintSolver(ConstraintSolver solver);
|
|
public abstract ConstraintSolver getConstraintSolver();
|
|
public int getNumConstraints() {
|
return 0;
|
}
|
|
public TypedConstraint getConstraint(int index) {
|
return null;
|
}
|
|
// JAVA NOTE: not part of the original api
|
public int getNumActions() {
|
return 0;
|
}
|
|
// JAVA NOTE: not part of the original api
|
public ActionInterface getAction(int index) {
|
return null;
|
}
|
|
public abstract DynamicsWorldType getWorldType();
|
|
public abstract void clearForces();
|
|
/**
|
* Set the callback for when an internal tick (simulation substep) happens, optional user info.
|
*/
|
public void setInternalTickCallback(InternalTickCallback cb, Object worldUserInfo) {
|
this.internalTickCallback = cb;
|
this.worldUserInfo = worldUserInfo;
|
}
|
|
public void setWorldUserInfo(Object worldUserInfo) {
|
this.worldUserInfo = worldUserInfo;
|
}
|
|
public Object getWorldUserInfo() {
|
return worldUserInfo;
|
}
|
|
public ContactSolverInfo getSolverInfo() {
|
return solverInfo;
|
}
|
|
}
|