00001 #include "engineLoaderVisitor.h"
00002 #include "engineLoader.h"
00003 #include <iostream>
00004
00005 namespace X3DTK
00006 {
00007 namespace X3D
00008 {
00009 EngineLoaderVisitor::EngineLoaderVisitor ()
00010 : CoreVisitor()
00011 {
00012 defineEnterFunction(&EngineLoaderVisitor::enterNode);
00013 defineLeaveFunction(&EngineLoaderVisitor::leaveNode);
00014 }
00015
00016 EngineLoaderVisitor::~EngineLoaderVisitor ()
00017 {}
00018
00019 void EngineLoaderVisitor::enterNode( X3DNode * e )
00020 {
00021
00022 assert(EngineLoader::s_allEngineNodes);
00023 assert(EngineLoader::s_kinematicNodes);
00024 assert(EngineLoader::s_dynamicNodes);
00025 assert(EngineLoader::s_collisionNodes);
00026 if( EngineNode* en = dynamic_cast<EngineNode*>(e) )
00027 {
00028
00029
00030
00031
00032 EngineLoader::s_allEngineNodes->push_back(en);
00033 if( en->behavior()==EngineNode::KINEMATICS )
00034 {
00035 EngineLoader::s_kinematicNodes->push_back(en);
00036 }
00037 else if( en->behavior()==EngineNode::DYNAMICS )
00038 {
00039 EngineLoader::s_dynamicNodes->push_back(en);
00040 }
00041 else if( en->behavior()==EngineNode::COLLISION )
00042 {
00043 EngineLoader::s_collisionNodes->push_back(en);
00044 }
00045
00046 }
00047
00048 if( X4DNode* x = dynamic_cast<X4DNode*>(e) )
00049 {
00050 x->init();
00051 }
00052 }
00053
00054 void EngineLoaderVisitor::leaveNode( X3DNode * e )
00055 {
00056 if( X4DNode* x = dynamic_cast<X4DNode*>(e) )
00057 {
00058 x->postInit();
00059 }
00060 }
00061
00062 }
00063 }