1 package com.neuronrobotics.bowlerstudio.physics;
3 import java.util.ArrayList;
5 import javax.vecmath.Matrix4f;
6 import javax.vecmath.Quat4f;
7 import javax.vecmath.Vector3f;
9 import com.bulletphysics.collision.broadphase.BroadphaseInterface;
10 import com.bulletphysics.collision.broadphase.DbvtBroadphase;
11 import com.bulletphysics.collision.dispatch.CollisionDispatcher;
12 import com.bulletphysics.collision.dispatch.DefaultCollisionConfiguration;
13 import com.bulletphysics.collision.shapes.CollisionShape;
14 import com.bulletphysics.collision.shapes.StaticPlaneShape;
15 import com.bulletphysics.dynamics.DiscreteDynamicsWorld;
16 import com.bulletphysics.dynamics.RigidBody;
17 import com.bulletphysics.dynamics.RigidBodyConstructionInfo;
18 import com.bulletphysics.dynamics.constraintsolver.SequentialImpulseConstraintSolver;
19 import com.bulletphysics.linearmath.DefaultMotionState;
20 import com.bulletphysics.linearmath.Transform;
21 import com.neuronrobotics.bowlerstudio.IssueReportingExceptionHandler;
22 import com.neuronrobotics.sdk.util.ThreadUtil;
24 import eu.mihosoft.vrl.v3d.CSG;
26 import javafx.application.Platform;
30 private BroadphaseInterface
broadphase =
new DbvtBroadphase();
34 private SequentialImpulseConstraintSolver
solver =
new SequentialImpulseConstraintSolver();
42 private ArrayList<IPhysicsManager>
objects =
new ArrayList<>();
88 public SequentialImpulseConstraintSolver
getSolver() {
114 this.groundShape = cs;
116 DefaultMotionState groundMotionState =
new DefaultMotionState(
117 new Transform(
new Matrix4f(
new Quat4f(0, 0, 0, 1),
new Vector3f(0, 0, 0), 1.0f)));
119 RigidBodyConstructionInfo groundRigidBodyCI =
new RigidBodyConstructionInfo(0,
121 new Vector3f(0, 0, 0));
166 long start = System.currentTimeMillis();
168 long took = (System.currentTimeMillis() - start);
172 System.out.println(
"Real time physics broken: " + took);
174 }
catch (Exception E) {
184 ArrayList<CSG> csg =
new ArrayList<>();
186 for (
CSG c : o.getBaseCSG()) {
198 public void step(
float timeStep) {
199 long startTime = System.currentTimeMillis();
202 if ((((
float) (System.currentTimeMillis() - startTime)) / 1000.0f) > timeStep) {
209 Platform.runLater(() -> {
213 }
catch (Exception e) {
221 step((
float) (timeStep / 1000.0));
295 this.simulationSubSteps = simpulationSubSteps;
static final float PhysicsGravityScalar
float linearSleepThreshhold
DefaultCollisionConfiguration collisionConfiguration
void setDispatcher(CollisionDispatcher dispatcher)
void startPhysicsThread(int ms)
void step(float timeStep)
float angularSleepThreshhold
void setSleepingThresholds(float linearSleepThreshhold, float angularSleepThreshhold)
void setSimulationSubSteps(int simpulationSubSteps)
BroadphaseInterface getBroadphase()
ArrayList< IPhysicsManager > getPhysicsObjects()
SequentialImpulseConstraintSolver solver
BroadphaseInterface broadphase
void setBroadphase(BroadphaseInterface broadphase)
void add(IPhysicsManager manager)
CollisionShape getGroundShape()
DiscreteDynamicsWorld dynamicsWorld
SequentialImpulseConstraintSolver getSolver()
void setSolver(SequentialImpulseConstraintSolver solver)
void stepMs(double timeStep)
int getSimulationSubSteps()
void setCollisionConfiguration(DefaultCollisionConfiguration collisionConfiguration)
void setObjects(ArrayList< IPhysicsManager > objects)
float getDeactivationTime()
void setGroundShape(CollisionShape cs)
CollisionDispatcher dispatcher
float getAngularSleepThreshhold()
ArrayList< IPhysicsManager > objects
float getLinearSleepThreshhold()
CollisionDispatcher getDispatcher()
void setDamping(float lin_damping, float ang_damping)
DiscreteDynamicsWorld getDynamicsWorld()
DefaultCollisionConfiguration getCollisionConfiguration()
ArrayList< CSG > getCsgFromEngine()
CollisionShape groundShape
RigidBody groundRigidBody
void setDynamicsWorld(DiscreteDynamicsWorld dynamicsWorld)
void setDeactivationTime(float deactivationTime)
static void wait(int time)
RigidBody getFallRigidBody()