private Vector3[] timeStep(IRigidBody rigidBody, float factor) { Vector3 accel = rigidBody.m_PreviousFrameAcceleration; Vector3 velocity = rigidBody.m_PreviousFrameVelocity; Vector3 pos = rigidBody.m_PreviousFramePosition; if (rigidBody.m_Kinematic) { if (accel != new Vector3()) { accel = rigidBody.m_PreviousFrameAcceleration.ReturnMultipleByScalar((float)Constant.elapsedTime * factor); } if (rigidBody.m_Drag > 0.0f) { Vector3 Temp = accel.ReturnMultipleByScalar(rigidBody.m_Drag); accel.SubtractVector(Temp); } velocity.AddScalarVector(rigidBody.m_PreviousFrameAcceleration, ((float)Constant.elapsedTime * factor)); pos.AddScalarVector(rigidBody.m_PreviousFrameVelocity, (float)Constant.elapsedTime * factor); return(new Vector3[] { velocity, pos }); } else { Vector3 vectorChange = rigidBody.m_Position.ReturnSubtractVector(pos); pos.AddVector(vectorChange.ReturnMultipleByScalar(factor)); return(new Vector3[] { velocity, pos }); } }