Home | nevrax.com |
|
hrc_trav.cppGo to the documentation of this file.00001 00007 /* Copyright, 2000 Nevrax Ltd. 00008 * 00009 * This file is part of NEVRAX NEL. 00010 * NEVRAX NEL is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2, or (at your option) 00013 * any later version. 00014 00015 * NEVRAX NEL is distributed in the hope that it will be useful, but 00016 * WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 * General Public License for more details. 00019 00020 * You should have received a copy of the GNU General Public License 00021 * along with NEVRAX NEL; see the file COPYING. If not, write to the 00022 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 00023 * MA 02111-1307, USA. 00024 */ 00025 00026 #include "std3d.h" 00027 00028 #include "3d/hrc_trav.h" 00029 #include "3d/skip_model.h" 00030 #include "3d/clip_trav.h" 00031 #include "3d/anim_detail_trav.h" 00032 #include "nel/misc/hierarchical_timer.h" 00033 00034 using namespace std; 00035 using namespace NLMISC; 00036 00037 00038 namespace NL3D 00039 { 00040 00041 00042 // *************************************************************************** 00043 IObs *CHrcTrav::createDefaultObs() const 00044 { 00045 return new CDefaultHrcObs; 00046 } 00047 00048 00049 // *************************************************************************** 00050 void CHrcTrav::traverse() 00051 { 00052 H_AUTO( NL3D_TravHRC ); 00053 00054 _MovingObjects.clear(); 00055 00056 // Traverse the graph. 00057 if(Root) 00058 Root->traverse(NULL); 00059 00060 // Inc the date. 00061 // NB: Now, observers update is done before ALL traversals. 00062 // Hence, we must inc the value before scene rendering. This is equivalent to start with 1, and inc at end of traverse(). 00063 CurrentDate++; 00064 } 00065 00066 00067 // *************************************************************************** 00068 void IBaseHrcObs::init() 00069 { 00070 IObs::init(); 00071 00072 ClipObs= safe_cast<IBaseClipObs*> (getObs(ClipTravId)); 00073 AnimDetailObs= safe_cast<IBaseAnimDetailObs*> (getObs(AnimDetailTravId)); 00074 00075 } 00076 00077 00078 // *************************************************************************** 00079 void IBaseHrcObs::addParent(IObs *father) 00080 { 00081 IObs *oldFather= getFirstParent(); 00082 00083 // Default bheavior. 00084 IObs::addParent(father); 00085 00086 // Our parent has changed ?? 00087 IObs *newFather= getFirstParent(); 00088 if( oldFather != newFather ) 00089 { 00090 // Since our parent has changed, must recompute WM. 00091 WorldDate=-1; 00092 } 00093 } 00094 00095 00096 } |