func (w World) ContactSurfaceLayer() float64 {
	return float64(C.dWorldGetContactSurfaceLayer(w.c()))
}
ContactSurfaceLayer returns the depth of the surface layer around all
geometry objects.
package ode
import "C"
import (
	"unsafe"
)
const (
	WorldStepThreadCountUnlimited = C.dWORLDSTEP_THREADCOUNT_UNLIMITED
)
var (
	worldData = map[World]interface{}{}
)
type World uintptr
func NewWorld() World {
	return cToWorld(C.dWorldCreate())
}
func cToWorld(c C.dWorldID) World {
	return World(unsafe.Pointer(c))
}
func (w World) c() C.dWorldID {
	return C.dWorldID(unsafe.Pointer(w))
}
func (w World) Destroy() {
	delete(worldData, w)
	C.dWorldDestroy(w.c())
}
func (w World) SetData(data interface{}) {
	worldData[w] = data
}
func (w World) Data() interface{} {
	return worldData[w]
}
func (w World) NewBody() Body {
	return cToBody(C.dBodyCreate(w.c()))
}
func (w World) SetGravity(grav Vector3) {
	C.dWorldSetGravity(w.c(), C.dReal(grav[0]), C.dReal(grav[1]), C.dReal(grav[2]))
}
func (w World) Gravity() Vector3 {
	grav := NewVector3()
	C.dWorldGetGravity(w.c(), (*C.dReal)(&grav[0]))
	return grav
}
func (w World) SetERP(erp float64) {
	C.dWorldSetERP(w.c(), C.dReal(erp))
}
func (w World) ERP() float64 {
	return float64(C.dWorldGetERP(w.c()))
}
func (w World) SetCFM(cfm float64) {
	C.dWorldSetCFM(w.c(), C.dReal(cfm))
}
func (w World) CFM() float64 {
	return float64(C.dWorldGetCFM(w.c()))
}
func (w World) SetStepIslandsProcessingMaxThreadCount(count int) {
	C.dWorldSetStepIslandsProcessingMaxThreadCount(w.c(), C.unsigned(count))
}
func (w World) StepIslandsProcessingMaxThreadCount() int {
	return int(C.dWorldGetStepIslandsProcessingMaxThreadCount(w.c()))
}
func (w World) UseSharedWorkingMemory(from World) bool {
	return C.dWorldUseSharedWorkingMemory(w.c(), from.c()) != 0
}
func (w World) CleanupWorkingMemory() {
	C.dWorldCleanupWorkingMemory(w.c())
}
func (w World) Step(stepSize float64) bool {
	return C.dWorldStep(w.c(), C.dReal(stepSize)) != 0
}
func (w World) QuickStep(stepSize float64) bool {
	return C.dWorldQuickStep(w.c(), C.dReal(stepSize)) != 0
}
func (w World) ImpulseToForce(stepSize float64, impulse Vector3) Vector3 {
	force := NewVector3()
	C.dWorldImpulseToForce(w.c(), C.dReal(stepSize),
		C.dReal(impulse[0]), C.dReal(impulse[1]), C.dReal(impulse[2]),
		(*C.dReal)(&force[0]))
	return force
}
func (w World) SetQuickStepNumIterations(num int) {
	C.dWorldSetQuickStepNumIterations(w.c(), C.int(num))
}
func (w World) QuickStepNumIterations() int {
	return int(C.dWorldGetQuickStepNumIterations(w.c()))
}
func (w World) SetQuickStepW(overRelaxation float64) {
	C.dWorldSetQuickStepW(w.c(), C.dReal(overRelaxation))
}
func (w World) QuickStepW() float64 {
	return float64(C.dWorldGetQuickStepW(w.c()))
}
func (w World) SetContactMaxCorrectingVelocity(overRelaxation float64) {
	C.dWorldSetContactMaxCorrectingVel(w.c(), C.dReal(overRelaxation))
}
func (w World) ContactMaxCorrectingVelocity() float64 {
	return float64(C.dWorldGetContactMaxCorrectingVel(w.c()))
}
func (w World) SetContactSurfaceLayer(depth float64) {
	C.dWorldSetContactSurfaceLayer(w.c(), C.dReal(depth))
}