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