1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: gfx_ISceneVisitor.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 23073 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_GFX_ISCENEVISITOR_H_ 17 #define NW_GFX_ISCENEVISITOR_H_ 18 19 #include <nw/gfx/gfx_GfxObject.h> 20 21 namespace nw 22 { 23 namespace gfx 24 { 25 26 class SceneNode; 27 class TransformNode; 28 class Model; 29 class SkeletalModel; 30 class Camera; 31 class Fog; 32 class Light; 33 class FragmentLight; 34 class AmbientLight; 35 class VertexLight; 36 class HemiSphereLight; 37 class ParticleSet; 38 class ParticleEmitter; 39 class ParticleModel; 40 41 //--------------------------------------------------------------------------- 42 //! @brief シーンツリーを巡回するためのインターフェースです。 43 //--------------------------------------------------------------------------- 44 class ISceneVisitor : public GfxObject 45 { 46 private: 47 NW_DISALLOW_COPY_AND_ASSIGN(ISceneVisitor); 48 49 public: 50 NW_UT_RUNTIME_TYPEINFO; 51 52 //! @brief シーンノードへの処理です。 53 //! 54 //! @param[in] node 55 //! 56 virtual void VisitSceneNode(SceneNode* node) = 0; 57 58 //! @brief トランスフォームノードへの処理です。 59 //! 60 //! @param[in] node 61 //! 62 virtual void VisitTransformNode(TransformNode* node) = 0; 63 64 //! @brief モデルへの処理です。 65 //! 66 //! @param[in] model 67 //! 68 virtual void VisitModel(Model* model) = 0; 69 70 //! @brief スケルタルモデルへの処理です。 71 //! 72 //! @param[in] model 73 //! 74 virtual void VisitSkeletalModel(SkeletalModel* model) = 0; 75 76 //! @brief カメラへの処理です。 77 //! 78 //! @param[in] camera 79 //! 80 virtual void VisitCamera(Camera* camera) = 0; 81 82 //! @brief フォグへの処理です。 83 //! 84 //! @param[in] fog 85 //! 86 virtual void VisitFog(Fog* fog) = 0; 87 88 //! @brief ライトへの処理です。 89 //! 90 //! @param[in] light 91 //! 92 virtual void VisitLight(Light* light) = 0; 93 94 //! @brief フラグメントライトへの処理です。 95 //! 96 //! @param[in] light 97 //! 98 virtual void VisitFragmentLight(FragmentLight* light) = 0; 99 100 #if defined(NW_GFX_VERTEX_LIGHT_ENABLED) 101 //! @brief 頂点ライトへの処理です。 102 //! 103 //! @param[in] light 104 //! 105 virtual void VisitVertexLight(VertexLight* light) = 0; 106 #endif 107 //! @brief アンビエントライトへの処理です。 108 //! 109 //! @param[in] light 110 //! 111 virtual void VisitAmbientLight(AmbientLight* light) = 0; 112 113 //! @brief 半球ライトへの処理です。 114 //! 115 //! @param[in] light 116 //! 117 virtual void VisitHemiSphereLight(HemiSphereLight* light) = 0; 118 119 //! @brief パーティクルセットへの処理です。 120 //! 121 //! @param[in] particleSet 122 //! 123 virtual void VisitParticleSet(ParticleSet* particleSet) = 0; 124 125 //! @brief パーティクルエミッタへの処理です。 126 //! 127 //! @param[in] particleEmitter 128 //! 129 virtual void VisitParticleEmitter(ParticleEmitter* particleEmitter) = 0; 130 131 //! @brief パーティクルモデルへの処理です。 132 //! 133 //! @param[in] particleModel 134 //! 135 virtual void VisitParticleModel(ParticleModel* particleModel) = 0; 136 137 protected: 138 //! コンストラクタです。 ISceneVisitor(os::IAllocator * allocator)139 ISceneVisitor(os::IAllocator* allocator) : GfxObject(allocator) {} 140 }; 141 142 } // namespace gfx 143 } // namespace nw 144 145 #endif // NW_GFX_ISCENEVISITOR_H_ 146