62 lines
1.5 KiB
C++
Executable File
62 lines
1.5 KiB
C++
Executable File
//
|
|
// KRSpotLight.cpp
|
|
// KREngine
|
|
//
|
|
// Created by Kearwood Gilbert on 12-04-05.
|
|
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
|
//
|
|
|
|
#include "KREngine-common.h"
|
|
#include "KRSpotLight.h"
|
|
|
|
KRSpotLight::KRSpotLight(KRScene &scene, std::string name) : KRLight(scene, name)
|
|
{
|
|
}
|
|
|
|
KRSpotLight::~KRSpotLight()
|
|
{
|
|
|
|
}
|
|
|
|
std::string KRSpotLight::getElementName() {
|
|
return "spot_light";
|
|
}
|
|
|
|
tinyxml2::XMLElement *KRSpotLight::saveXML( tinyxml2::XMLNode *parent)
|
|
{
|
|
tinyxml2::XMLElement *e = KRLight::saveXML(parent);
|
|
e->SetAttribute("inner_angle", m_innerAngle);
|
|
e->SetAttribute("outer_angle", m_outerAngle);
|
|
return e;
|
|
}
|
|
|
|
void KRSpotLight::loadXML(tinyxml2::XMLElement *e) {
|
|
KRLight::loadXML(e);
|
|
|
|
e->QueryFloatAttribute("inner_angle", &m_innerAngle);
|
|
e->QueryFloatAttribute("outer_angle", &m_outerAngle);
|
|
}
|
|
|
|
float KRSpotLight::getInnerAngle() {
|
|
return m_innerAngle;
|
|
}
|
|
float KRSpotLight::getOuterAngle() {
|
|
return m_outerAngle;
|
|
}
|
|
void KRSpotLight::setInnerAngle(float innerAngle) {
|
|
m_innerAngle = innerAngle;
|
|
}
|
|
void KRSpotLight::setOuterAngle(float outerAngle) {
|
|
m_outerAngle = outerAngle;
|
|
}
|
|
|
|
KRAABB KRSpotLight::getBounds() {
|
|
float influence_radius = m_decayStart - sqrt(m_intensity * 0.01f) / sqrt(KRLIGHT_MIN_INFLUENCE);
|
|
if(influence_radius < m_flareOcclusionSize) {
|
|
influence_radius = m_flareOcclusionSize;
|
|
}
|
|
return KRAABB(KRVector3(-influence_radius), KRVector3(influence_radius), getModelMatrix());
|
|
}
|
|
|
|
|