From 8de82012574c8ec97c880d09e039de4797195caf Mon Sep 17 00:00:00 2001 From: Baggers Date: Sun, 4 Sep 2016 12:19:29 +0200 Subject: [PATCH] add an 'is-initialized' func Also a sanity check around init & uninit. --- ode.lisp | 31 ++++++++++++++++++------------- package.lisp | 6 +++--- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ode.lisp b/ode.lisp index 9c03541..0c7a0a7 100644 --- a/ode.lisp +++ b/ode.lisp @@ -2,7 +2,7 @@ (in-package #:cl-ode) (declaim (optimize (speed 3))) -(defvar *default-max-contacts* 25) +(defvar *default-max-contacts* 25) (cffi:defcallback near-callback :void ((data :pointer) (o1 :pointer) @@ -10,10 +10,10 @@ (declare (ignore data)) (unless (pointer-eq o1 o2) - + (close-callback (gethash (cffi:pointer-address o1) *object-hash*) (gethash (cffi:pointer-address o2) *object-hash*)))) - + (cffi:defcallback moved-callback :void ((body :pointer)) (let ((body (gethash (cffi:pointer-address body) *object-hash*))) @@ -21,7 +21,7 @@ (body-moved-callback body)))) -(defcfun-rename-function ("dBodySetMovedCallback") :void +(defcfun-rename-function ("dBodySetMovedCallback") :void (body dBodyID) (callback :pointer)) @@ -29,7 +29,7 @@ (defun near-handler (data o1 o2) (unless (cffi:pointer-eq o1 o2) - + (let* ((lisp-object1 (gethash (pointer-address o1) *object-hash*)) (lisp-object2 (gethash (pointer-address o2) *object-hash*))) @@ -37,11 +37,16 @@ (close-callback lisp-object1 lisp-object2))))) +(defvar *initialized* nil) (defun init () - - (init-ode) - (setf *object-hash* (make-hash-table :test 'equal))) + (if (is-initialized?) + (warn "Will not attempt to initalize cl-ode as it seems to already be initialized") + (progn + (init-ode) + (setf *initialized* t) + (setf *object-hash* (make-hash-table :test 'equal)) + t))) (defun physics-step (world space) @@ -51,10 +56,10 @@ (joint-group-empty (contact-group world))) (defun uninit () - - (close-ode) + (when (is-initialized?) + (close-ode) + (setf *initialized* nil)) (setf *object-hash* nil)) - - - +(defun is-initialized? () + *initialized*) diff --git a/package.lisp b/package.lisp index f374ff3..10e2b61 100644 --- a/package.lisp +++ b/package.lisp @@ -4,7 +4,7 @@ (defpackage #:cl-ode (:use #:cl #:cffi) (:nicknames #:ode) - (:export + (:export #:dReal #:dMass #:dVector3 #:dVector4 #:dMatrix3 #:dMatrix4 #:dMatrix6 #:dWorldID #:dSpaceID #:dBodyID #:dGeomID #:dJointID #:dJointGroupID @@ -30,6 +30,7 @@ #:init #:physics-step #:uninit + #:is-initialized? #:body #:pointer #:enabled @@ -41,5 +42,4 @@ #:close-callback #:update #:ray-length #:physics-spring #:springiness #:damping - #:horizontal #:vertical #:load-player-camera - )) + #:horizontal #:vertical #:load-player-camera))