1 |
namespace Oni.Dae |
2 |
{ |
3 |
internal class Visitor |
4 |
{ |
5 |
public virtual void VisitScene(Scene scene) |
6 |
{ |
7 |
foreach (var node in scene.Nodes) |
8 |
VisitNode(node); |
9 |
} |
10 |
|
11 |
public virtual void VisitNode(Node node) |
12 |
{ |
13 |
foreach (var transform in node.Transforms) |
14 |
VisitTransform(transform); |
15 |
|
16 |
foreach (var instance in node.Instances) |
17 |
{ |
18 |
if (instance is GeometryInstance) |
19 |
VisitGeometryInstance((GeometryInstance)instance); |
20 |
else if (instance is LightInstance) |
21 |
VisitLightInstance((LightInstance)instance); |
22 |
else if (instance is CameraInstance) |
23 |
VisitCameraInstance((CameraInstance)instance); |
24 |
} |
25 |
|
26 |
foreach (var child in node.Nodes) |
27 |
VisitNode(child); |
28 |
} |
29 |
|
30 |
public virtual void VisitGeometryInstance(GeometryInstance instance) |
31 |
{ |
32 |
foreach (var materialInstance in instance.Materials) |
33 |
VisitMaterialInstance(materialInstance); |
34 |
|
35 |
VisitGeometry(instance.Target); |
36 |
} |
37 |
|
38 |
public virtual void VisitGeometry(Geometry geometry) |
39 |
{ |
40 |
foreach (var input in geometry.Vertices) |
41 |
VisitInput(input); |
42 |
|
43 |
foreach (var primitives in geometry.Primitives) |
44 |
VisitMeshPrimitives(primitives); |
45 |
} |
46 |
|
47 |
public virtual void VisitMeshPrimitives(MeshPrimitives primitives) |
48 |
{ |
49 |
foreach (var input in primitives.Inputs) |
50 |
VisitInput(input); |
51 |
} |
52 |
|
53 |
public virtual void VisitMaterialInstance(MaterialInstance instance) |
54 |
{ |
55 |
VisitMaterial(instance.Target); |
56 |
} |
57 |
|
58 |
public virtual void VisitMaterial(Material material) |
59 |
{ |
60 |
VisitEffect(material.Effect); |
61 |
} |
62 |
|
63 |
public virtual void VisitLightInstance(LightInstance instance) |
64 |
{ |
65 |
VisitLight(instance.Target); |
66 |
} |
67 |
|
68 |
public virtual void VisitLight(Light light) |
69 |
{ |
70 |
} |
71 |
|
72 |
public virtual void VisitCameraInstance(CameraInstance instance) |
73 |
{ |
74 |
VisitCamera(instance.Target); |
75 |
} |
76 |
|
77 |
public virtual void VisitCamera(Camera camera) |
78 |
{ |
79 |
} |
80 |
|
81 |
public virtual void VisitTransform(Transform transform) |
82 |
{ |
83 |
if (transform.HasAnimations) |
84 |
{ |
85 |
foreach (var sampler in transform.Animations.Where(s => s != null)) |
86 |
VisitSampler(sampler); |
87 |
} |
88 |
} |
89 |
|
90 |
public virtual void VisitSampler(Sampler sampler) |
91 |
{ |
92 |
foreach (var input in sampler.Inputs) |
93 |
VisitInput(input); |
94 |
} |
95 |
|
96 |
public virtual void VisitEffect(Effect effect) |
97 |
{ |
98 |
foreach (var parameter in effect.Parameters) |
99 |
VisitEffectParameter(parameter); |
100 |
|
101 |
VisitEffectParameter(effect.Ambient); |
102 |
VisitEffectParameter(effect.Diffuse); |
103 |
VisitEffectParameter(effect.Emission); |
104 |
VisitEffectParameter(effect.IndexOfRefraction); |
105 |
VisitEffectParameter(effect.Reflective); |
106 |
VisitEffectParameter(effect.Shininess); |
107 |
VisitEffectParameter(effect.Specular); |
108 |
VisitEffectParameter(effect.Transparency); |
109 |
VisitEffectParameter(effect.Transparent); |
110 |
} |
111 |
|
112 |
public virtual void VisitEffectParameter(EffectParameter parameter) |
113 |
{ |
114 |
if (parameter.Value is EffectTexture) |
115 |
VisitEffectTexture((EffectTexture)parameter.Value); |
116 |
} |
117 |
|
118 |
public virtual void VisitEffectTexture(EffectTexture texture) |
119 |
{ |
120 |
VisitEffectSampler(texture.Sampler); |
121 |
} |
122 |
|
123 |
public virtual void VisitEffectSampler(EffectSampler sampler) |
124 |
{ |
125 |
VisitEffectSurface(sampler.Surface); |
126 |
} |
127 |
|
128 |
public virtual void VisitEffectSurface(EffectSurface surface) |
129 |
{ |
130 |
VisitImage(surface.InitFrom); |
131 |
} |
132 |
|
133 |
public virtual void VisitInput(Input input) |
134 |
{ |
135 |
VisitSource(input.Source); |
136 |
} |
137 |
|
138 |
public virtual void VisitSource(Source source) |
139 |
{ |
140 |
} |
141 |
|
142 |
public virtual void VisitImage(Image image) |
143 |
{ |
144 |
} |
145 |
} |
146 |
} |