1
// Copyright (C) 2002-2011 Nikolaus Gebhardt
2
// This file is part of the "Irrlicht Engine".
3
// For conditions of distribution and use, see copyright notice in irrlicht.h
5
#include "CDefaultSceneNodeFactory.h"
6
#include "ISceneManager.h"
7
#include "ITextSceneNode.h"
8
#include "ITerrainSceneNode.h"
9
#include "IDummyTransformationSceneNode.h"
10
#include "ICameraSceneNode.h"
11
#include "IBillboardSceneNode.h"
12
#include "IAnimatedMeshSceneNode.h"
13
#include "IParticleSystemSceneNode.h"
14
#include "ILightSceneNode.h"
15
#include "IMeshSceneNode.h"
23
CDefaultSceneNodeFactory::CDefaultSceneNodeFactory(ISceneManager* mgr)
28
setDebugName("CDefaultSceneNodeFactory");
31
// don't grab the scene manager here to prevent cyclic references
33
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_CUBE, "cube"));
34
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_SPHERE, "sphere"));
35
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_TEXT, "text"));
36
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_WATER_SURFACE, "waterSurface"));
37
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_TERRAIN, "terrain"));
38
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_SKY_BOX, "skyBox"));
39
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_SKY_DOME, "skyDome"));
40
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_SHADOW_VOLUME, "shadowVolume"));
41
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_OCTREE, "octree"));
43
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_OCTREE, "octTree"));
44
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_MESH, "mesh"));
45
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_LIGHT, "light"));
46
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_EMPTY, "empty"));
47
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_DUMMY_TRANSFORMATION, "dummyTransformation"));
48
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_CAMERA, "camera"));
49
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_BILLBOARD, "billBoard"));
50
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_ANIMATED_MESH, "animatedMesh"));
51
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_PARTICLE_SYSTEM, "particleSystem"));
52
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_VOLUME_LIGHT, "volumeLight"));
53
// SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_MD3_SCENE_NODE, "md3"));
55
// legacy, for version <= 1.4.x irr files
56
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_CAMERA_MAYA, "cameraMaya"));
57
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_CAMERA_FPS, "cameraFPS"));
58
SupportedSceneNodeTypes.push_back(SSceneNodeTypePair(ESNT_Q3SHADER_SCENE_NODE, "quake3Shader"));
62
//! adds a scene node to the scene graph based on its type id
63
ISceneNode* CDefaultSceneNodeFactory::addSceneNode(ESCENE_NODE_TYPE type, ISceneNode* parent)
68
return Manager->addCubeSceneNode(10, parent);
70
return Manager->addSphereSceneNode(5, 16, parent);
72
return Manager->addTextSceneNode(0, L"example");
73
case ESNT_WATER_SURFACE:
74
return Manager->addWaterSurfaceSceneNode(0, 2.0f, 300.0f, 10.0f, parent);
76
return Manager->addTerrainSceneNode("", parent, -1,
77
core::vector3df(0.0f,0.0f,0.0f),
78
core::vector3df(0.0f,0.0f,0.0f),
79
core::vector3df(1.0f,1.0f,1.0f),
80
video::SColor(255,255,255,255),
83
return Manager->addSkyBoxSceneNode(0,0,0,0,0,0, parent);
85
return Manager->addSkyDomeSceneNode(0, 16, 8, 0.9f, 2.0f, 1000.0f, parent);
86
case ESNT_SHADOW_VOLUME:
89
return Manager->addOctreeSceneNode((IMesh*)0, parent, -1, 128, true);
91
return Manager->addMeshSceneNode(0, parent, -1, core::vector3df(),
92
core::vector3df(), core::vector3df(1,1,1), true);
94
return Manager->addLightSceneNode(parent);
96
return Manager->addEmptySceneNode(parent);
97
case ESNT_DUMMY_TRANSFORMATION:
98
return Manager->addDummyTransformationSceneNode(parent);
100
return Manager->addCameraSceneNode(parent);
101
case ESNT_CAMERA_MAYA:
102
return Manager->addCameraSceneNodeMaya(parent);
103
case ESNT_CAMERA_FPS:
104
return Manager->addCameraSceneNodeFPS(parent);
106
return Manager->addBillboardSceneNode(parent);
107
case ESNT_ANIMATED_MESH:
108
return Manager->addAnimatedMeshSceneNode(0, parent, -1, core::vector3df(),
109
core::vector3df(), core::vector3df(1,1,1), true);
110
case ESNT_PARTICLE_SYSTEM:
111
return Manager->addParticleSystemSceneNode(true, parent);
112
case ESNT_VOLUME_LIGHT:
113
return (ISceneNode*)Manager->addVolumeLightSceneNode(parent);
122
//! adds a scene node to the scene graph based on its type name
123
ISceneNode* CDefaultSceneNodeFactory::addSceneNode(const c8* typeName, ISceneNode* parent)
125
return addSceneNode( getTypeFromName(typeName), parent );
129
//! returns amount of scene node types this factory is able to create
130
u32 CDefaultSceneNodeFactory::getCreatableSceneNodeTypeCount() const
132
return SupportedSceneNodeTypes.size();
136
//! returns type of a createable scene node type
137
ESCENE_NODE_TYPE CDefaultSceneNodeFactory::getCreateableSceneNodeType(u32 idx) const
139
if (idx<SupportedSceneNodeTypes.size())
140
return SupportedSceneNodeTypes[idx].Type;
146
//! returns type name of a createable scene node type
147
const c8* CDefaultSceneNodeFactory::getCreateableSceneNodeTypeName(u32 idx) const
149
if (idx<SupportedSceneNodeTypes.size())
150
return SupportedSceneNodeTypes[idx].TypeName.c_str();
156
//! returns type name of a createable scene node type
157
const c8* CDefaultSceneNodeFactory::getCreateableSceneNodeTypeName(ESCENE_NODE_TYPE type) const
159
for (u32 i=0; i<SupportedSceneNodeTypes.size(); ++i)
160
if (SupportedSceneNodeTypes[i].Type == type)
161
return SupportedSceneNodeTypes[i].TypeName.c_str();
167
ESCENE_NODE_TYPE CDefaultSceneNodeFactory::getTypeFromName(const c8* name) const
169
for (u32 i=0; i<SupportedSceneNodeTypes.size(); ++i)
170
if (SupportedSceneNodeTypes[i].TypeName == name)
171
return SupportedSceneNodeTypes[i].Type;
177
} // end namespace scene
178
} // end namespace irr