00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "perceptorhandler.h"
00023 #include "collisionperceptor.h"
00024 #include <oxygen/physicsserver/collider.h>
00025 #include <oxygen/sceneserver/transform.h>
00026
00027 using namespace oxygen;
00028 using namespace boost;
00029
00030 void
00031 PerceptorHandler::HandleCollision
00032 (boost::shared_ptr<Collider> collidee, dContact& )
00033 {
00034
00035 shared_ptr<Transform> transformParent = shared_static_cast<Transform>
00036 (make_shared(GetParentSupportingClass("Transform")));
00037
00038 if (transformParent.get() == 0)
00039 {
00040 return;
00041 }
00042
00043 shared_ptr<CollisionPerceptor> perceptor =
00044 shared_static_cast<CollisionPerceptor>
00045 (transformParent->GetChildOfClass("CollisionPerceptor", true));
00046
00047 if (perceptor.get() == 0)
00048 {
00049 return;
00050 }
00051
00052
00053 shared_ptr<Transform> colTransformParent = shared_static_cast<Transform>
00054 (make_shared(collidee->GetParentSupportingClass("Transform")));
00055
00056 if (colTransformParent.get() == 0)
00057 {
00058 return;
00059 }
00060
00061
00062 perceptor->AddCollidee(colTransformParent);
00063 }