      :or {max-sub-steps 5 time-step (/ 1 60)}
      :as screen}
    & [entities]]
-  (when (isa? (type (:object (u/get-obj screen :world))) btDynamicsWorld)
-    (bullet-3d! screen :step-simulation delta-time max-sub-steps time-step)
-    (when entities
-      (map (fn [e]
-             (if (u/get-obj e :body)
-               (assoc e
-                      :x (body-x e)
-                      :y (body-y e)
-                      :z (body-z e))
-               e))
-           entities))))
+  (bullet-3d! screen :step-simulation delta-time max-sub-steps time-step)
+  (when entities
+    (map (fn [e]
+           (if (u/get-obj e :body)
+             (assoc e
+                    :x (body-x e)
+                    :y (body-y e)
+                    :z (body-z e))
+             e))
+         entities)))

           [com.badlogic.gdx.physics.bullet Bullet]
           [com.badlogic.gdx.physics.bullet.collision btBoxShape
            btCollisionDispatcher btCylinderShape btCollisionObject
            btCollisionWorld btDefaultCollisionConfiguration btDbvtBroadphase
            btSphereShape]
           [com.badlogic.gdx.physics.bullet.dynamics btDiscreteDynamicsWorld
            btDynamicsWorld btRigidBody btRigidBody$btRigidBodyConstructionInfo
            btSequentialImpulseConstraintSolver]
           [com.badlogic.gdx.physics.bullet.linearmath btMotionState]))

(def ^:private init (delay (Bullet/init)))


  (btRigidBody$btRigidBodyConstructionInfo.
    mass motion-state collision-shape local-inertia))

(defn soft-body*
  [info]
  (assoc (Body3D. (btSoftBody. info))
         :info info))

(defmacro soft-body
  "Returns a body based on btSoftBody."
  [info & options]
  `(let [body# (soft-body* ~info)
         ^btSoftBody object# (:object body#)]
     (u/calls! object# ~@options)
     body#))

(defmacro soft-body!
  "Calls a single method on a `soft-body`."
  [object k & options]
  `(let [^btSoftBody object# (:object (u/get-obj ~object :body))]
     (u/call! object# ~k ~@options)))

(defn soft-body-info
  "Returns a btSoftBodyWorldInfo."
  []
  (btSoftBodyWorldInfo.))

(defn ^:private body-x
  [entity]
