step(dt) {
		if (this.physic === "builtin") {
			const isPaused = state.isPaused();
			// iterate through all bodies
			this.bodies.forEach((body) => {
				if (!body.isStatic) {
					const ancestor = body.ancestor;
					// if the game is not paused, and ancestor can be updated
					if (
						!(isPaused && !ancestor.updateWhenPaused) &&
						(ancestor.inViewport || ancestor.alwaysUpdate)
					) {
						// apply gravity to this body
						this.bodyApplyGravity(body);
						// body update function (this moves it)
						if (body.update(dt) === true) {
							// mark ancestor as dirty
							ancestor.isDirty = true;
						}
						// handle collisions against other objects
						this.detector.collisions(ancestor);
						// clear body force
						body.force.set(0, 0);
					}
				}
			});
		}
		eventEmitter.emit(WORLD_STEP, dt);
	}
update the builtin physic simulation by one step (called by the game world update method)
@param {number} dt - the time passed since the last frame update