private void simulate(double t) {
		physicsLock.lock();
		// Do physics for bodies
		for (int k = 0; k < bodies.size(); k++) {
			Body b = bodies.get(k);
			Vector3D vHalf = b.velocity.clone().add(a[k].multiply(t / 2d));
			b.position.add(vHalf.clone().multiply(t));
			a[k] = getAcceleration(b);
			b.velocity = vHalf.add(a[k].clone().multiply(t / 2.0));
		}

		// Do physics for craft
		for (int i = 0; i < ships.size(); i++) {
			Craft c = ships.get(i); // shippuden
			Vector3D vHalf = c.velocity.clone().add(aCraft[i].multiply(t / 2d));
			c.position.add(vHalf.clone().multiply(t));
			aCraft[i] = getAccelerationForCraft(c);
			c.velocity = vHalf.add(aCraft[i].clone().multiply(t / 2.0));
		}

		physicsLock.unlock();
		timer.elapsedTime += t;
		missionTime += t;
		for (int i = 0; i < bodies.size(); i++) {
			Body b = bodies.get(i);
			if (b.hasTrail) {
				b.trail.makeTrail();
			}
		}
	}