00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "LightComponent.h"
00018 #include "../../core/GameManager.h"
00019
00020
00021
00022
00023 LightComponent::LightComponent(Entity *parent, const SColorf &color, f32 radius)
00024 : SceneComponent(parent, true)
00025 {
00026
00027 ISceneManager *pSceneMgr = GameManager::Instance()->getSceneManager();
00028
00029
00030 mLightSN = pSceneMgr->addLightSceneNode(0, parent->getAbsolutePosition(), color, radius,
00031 parent->getID());
00032 mSceneNode = mLightSN;
00033
00034
00035 mTriSelector = NULL;
00036 mMetaSelector = NULL;
00037 }
00038
00039
00040 LightComponent::~LightComponent()
00041 {
00042 mLightSN->remove();
00043 mSceneNode = NULL;
00044 }
00045
00046
00047 ILightSceneNode* LightComponent::getLightSceneNode()
00048 {
00049 return mLightSN;
00050 }
00051
00052
00053 bool LightComponent::getCastShadow() const
00054 {
00055 return mLightSN->getCastShadow();
00056 }
00057
00058
00059 E_LIGHT_TYPE LightComponent::getLightType() const
00060 {
00061 return mLightSN->getLightType();
00062 }
00063
00064
00065 f32 LightComponent::getRadius() const
00066 {
00067 return mLightSN->getRadius();
00068 }
00069
00070
00071 void LightComponent::setCastShadow(bool shadow)
00072 {
00073 mLightSN->enableCastShadow(shadow);
00074 }
00075
00076
00077 void LightComponent::setLightType(E_LIGHT_TYPE type)
00078 {
00079 mLightSN->setLightType(type);
00080 }
00081
00082
00083 void LightComponent::setRadius(f32 radius)
00084 {
00085 mLightSN->setRadius(radius);
00086 }
00087
00088
00089 bool LightComponent::parseXML(IXMLReader *file, Entity *entity)
00090 {
00091
00092 LightComponent *component = NULL;
00093
00094
00095 if(file->getNodeType() == io::EXN_ELEMENT)
00096 {
00097 if(stringw("LightComponent") == file->getNodeName())
00098 {
00099
00100 component = new LightComponent(entity);
00101 }
00102 }
00103
00104 if(component == NULL)
00105 return false;
00106
00107
00108 while(file->read())
00109 {
00110 switch(file->getNodeType())
00111 {
00112 case io::EXN_ELEMENT:
00113
00114
00115 if(stringw("castShadow") == file->getNodeName())
00116 {
00117 stringc value = file->getAttributeValue(L"value");
00118 component->setCastShadow( (value == "true") ? true : false );
00119 }
00120
00121
00122 else if(stringw("lightType") == file->getNodeName())
00123 {
00124 stringc lightType = file->getAttributeValue(L"value");
00125 E_LIGHT_TYPE type;
00126
00127 #define retrieveLightType(x) \
00128 else if(lightType == #x) \
00129 type = x
00130
00131 if(lightType== "")
00132 type = ELT_POINT;
00133
00134 retrieveLightType(ELT_POINT);
00135 retrieveLightType(ELT_SPOT);
00136 retrieveLightType(ELT_DIRECTIONAL);
00137
00138 #undef retrieveLightType
00139
00140 component->setLightType(type);
00141 }
00142
00143
00144 else if(stringw("radius") == file->getNodeName())
00145 component->setRadius(file->getAttributeValueAsFloat(L"value"));
00146
00147
00148 else SceneComponent::parseBaseXML(file, component);
00149
00150 break;
00151
00152 case io::EXN_ELEMENT_END:
00153
00154
00155 if(stringw("LightComponent") == file->getNodeName())
00156 return true;
00157
00158 break;
00159
00160 default:
00161
00162 break;
00163 }
00164
00165 }
00166
00167
00168 return false;
00169 }
00170
00171