source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreRenderable.cpp @ 1055

Revision 1055, 5.3 KB checked in by szirmay, 18 years ago (diff)
Line 
1#include "..\include\ogrerenderable.h"
2
3OgreRenderable::OgreRenderable(SubEntity* sube, Entity* parentEntity)
4{
5        renderableType = OGRE_RENDERABLETYPE_SUBENTITY;
6        subEntityRenderable = sube;
7        this->parentEntity = parentEntity;
8        int subEntityNum = 0;
9        updateBounds();
10        for(unsigned int i = 0; i < parentEntity->getNumSubEntities(); i++)
11        {
12                if(parentEntity->getSubEntity(i) == sube)
13                {
14                        subEntityNum = i;
15                        break;
16                }
17        }
18        name = parentEntity->getName() + "_SE_" + StringConverter::toString(subEntityNum);
19}
20
21OgreRenderable::OgreRenderable(Entity* parentEntity, int subEntityNum)
22{
23        SubEntity* sube = parentEntity->getSubEntity(subEntityNum);
24        renderableType = OGRE_RENDERABLETYPE_SUBENTITY;
25        subEntityRenderable = sube;
26        this->parentEntity = parentEntity;
27        updateBounds();
28        name = parentEntity->getName() + "_SE_" + StringConverter::toString(subEntityNum);
29}
30
31OgreRenderable::OgreRenderable(BillboardSet* billboardset, ParticleSystem* sys)
32{
33        renderableType = OGRE_RENDERABLETYPE_BILLBOARDSET;
34        billboardSetRenderable = billboardset;
35        parentParticleSystem = sys;
36        updateBounds();
37        name = billboardset->getName();
38}
39
40OgreRenderable::~OgreRenderable(void)
41{
42
43}
44
45void OgreRenderable::setVisible(bool visible)
46{
47        switch(renderableType)
48        {
49         case OGRE_RENDERABLETYPE_SUBENTITY:
50//               subEntityRenderable->setVisible(visible);
51                 parentEntity->setVisible(visible);
52                 break;
53         case OGRE_RENDERABLETYPE_BILLBOARDSET:
54                 if(parentParticleSystem != 0)
55                         parentParticleSystem->setVisible(visible);
56                 else
57                         billboardSetRenderable->setVisible(visible);
58                 break;
59          default:
60                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
61                "Unknown renderable type! Check RenderTechnique initializations!",
62                "OgreRenderable::setVisible");
63        }
64}
65
66void OgreRenderable::setMaterialName(String& name)
67{
68        switch(renderableType)
69        {
70         case OGRE_RENDERABLETYPE_SUBENTITY:
71                 subEntityRenderable->setMaterialName(name);
72                 break;
73         case OGRE_RENDERABLETYPE_BILLBOARDSET:
74                 billboardSetRenderable->setMaterialName(name);         
75                 break;
76         default:
77                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
78                "Unknown renderable type! Check RenderTechnique initializations!",
79                "OgreRenderable::setMaterialName");
80        }
81}
82
83const MaterialPtr& OgreRenderable::getMaterialPtr()
84{
85        switch(renderableType)
86        {
87         case OGRE_RENDERABLETYPE_SUBENTITY:
88                return  subEntityRenderable->getMaterial();             
89         case OGRE_RENDERABLETYPE_BILLBOARDSET:
90                return billboardSetRenderable->getMaterial();
91         default:
92                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
93                "Unknown renderable type, can't return material pointer! Check RenderTechnique initializations!",
94                "OgreRenderable::getMaterialPtr");
95        }
96}
97
98void  OgreRenderable::setRenderGroup(unsigned char groupID)
99{
100        switch(renderableType)
101        {
102         case OGRE_RENDERABLETYPE_SUBENTITY:
103                 parentEntity->setRenderQueueGroup(groupID);             
104         case OGRE_RENDERABLETYPE_BILLBOARDSET:
105                 billboardSetRenderable->setRenderQueueGroup(groupID);
106         default:
107                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
108                "Unknown renderable type! Check RenderTechnique initializations!",
109                "OgreRenderable::setRenderGroup");
110        }
111}
112
113bool  OgreRenderable::isVisible()
114{
115        switch(renderableType)
116        {
117         case OGRE_RENDERABLETYPE_SUBENTITY:
118                 return subEntityRenderable->isVisible();               
119         case OGRE_RENDERABLETYPE_BILLBOARDSET:
120                 return billboardSetRenderable->isVisible();
121         default:
122                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
123                "Unknown renderable type! Check RenderTechnique initializations!",
124                "OgreRenderable::isVisible");
125        }
126}
127
128void OgreRenderable::updateBounds()
129{
130        switch(renderableType)
131        {
132         case OGRE_RENDERABLETYPE_SUBENTITY:
133                 parentEntity->getParentSceneNode()->_updateBounds();
134                 boundingBox = parentEntity->getWorldBoundingBox(true);
135                 boundingSphere = parentEntity->getWorldBoundingSphere(true);   
136                 break;
137         case OGRE_RENDERABLETYPE_BILLBOARDSET:
138                 billboardSetRenderable->getParentSceneNode()->_updateBounds();
139                 boundingBox = billboardSetRenderable->getWorldBoundingBox(true);
140                 boundingSphere = billboardSetRenderable->getWorldBoundingSphere(true);
141                 break;
142        default:
143                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
144                "Unknown renderable type! Check RenderTechnique initializations!",
145                "OgreRenderable::updateBounds");
146        }
147       
148}
149
150Renderable* OgreRenderable::getRenderable()
151{
152        switch(renderableType)
153        {
154         case OGRE_RENDERABLETYPE_SUBENTITY:
155                        return subEntityRenderable;
156                 break;
157         case OGRE_RENDERABLETYPE_BILLBOARDSET:
158                        return billboardSetRenderable;           
159                 break;
160        default:
161                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
162                "Unknown renderable type! Check RenderTechnique initializations!",
163                "OgreRenderable::getRenderable");
164        }
165}
166
167void OgreRenderable::notifyCamera(Camera* cam)
168{
169        switch(renderableType)
170        {
171         case OGRE_RENDERABLETYPE_SUBENTITY:
172                        parentEntity->_notifyCurrentCamera(cam);
173                 break;
174         case OGRE_RENDERABLETYPE_BILLBOARDSET:
175                        billboardSetRenderable->_notifyCurrentCamera(cam);               
176                 break;
177        default:
178                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
179                "Unknown renderable type! Check RenderTechnique initializations!",
180                "OgreRenderable::notifyCamera");
181        }
182}
Note: See TracBrowser for help on using the repository browser.