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