/*---------------------------------------------------------------------------* Project: NintendoWare File: gfx_SceneTraverser.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 23073 $ *---------------------------------------------------------------------------*/ #ifndef NW_GFX_SCENETRAVERSER_H_ #define NW_GFX_SCENETRAVERSER_H_ #include namespace nw { namespace gfx { class SceneContext; //--------------------------------------------------------------------------- //! @brief シーン内を探索して更新と描画に必要な情報を収集します。 //--------------------------------------------------------------------------- class SceneTraverser : public ISceneVisitor { private: NW_DISALLOW_COPY_AND_ASSIGN(SceneTraverser); public: NW_UT_RUNTIME_TYPEINFO; //! シーントラバーサを構築するためのクラスです。 class Builder { public: //! @brief シーントラバーサを生成します。 //! //! @param[in] allocator //! //! @return 生成したトラバーサを返します。 //! SceneTraverser* Create(os::IAllocator* allocator); }; //! @brief トラバース前処理を行います。 //! //! 解析内容を管理するシーンコンテキストを設定します。 //! //! @param[in] sceneContext シーンコンテキストです。 //! void Begin(SceneContext* sceneContext); //! トラバース後処理を行います。 void End(); //---------------------------------------- //! @name ビジターの実装 //@{ virtual void VisitSceneNode(SceneNode* node); virtual void VisitTransformNode(TransformNode* node); virtual void VisitModel(Model* model); virtual void VisitSkeletalModel(SkeletalModel* model); virtual void VisitCamera(Camera* camera); virtual void VisitFog(Fog* fog); virtual void VisitLight(Light* light); virtual void VisitFragmentLight(FragmentLight* light); #if defined(NW_GFX_VERTEX_LIGHT_ENABLED) virtual void VisitVertexLight(VertexLight* light); #endif virtual void VisitAmbientLight(AmbientLight* light); virtual void VisitHemiSphereLight(HemiSphereLight* light); virtual void VisitParticleSet(ParticleSet* particleSet); virtual void VisitParticleEmitter(ParticleEmitter* particleEmitter); virtual void VisitParticleModel(ParticleModel* particleModel); //@} private: SceneTraverser(os::IAllocator* allocator) : ISceneVisitor(allocator), m_SceneContext(NULL) {} virtual ~SceneTraverser() {} SceneContext* m_SceneContext; }; } // namespace gfx } // namespace nw #endif // NW_GFX_SCENETRAVERSER_H_