OSDN Git Service

b575e3e5674c48b8a544694a358b568a58723322
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / AmbientLight.cpp
1 #include "mof/AmbientLight.hpp"
2 #include "mof/ConsoleIO.hpp"
3 #include "mof/private/GraphicsDeviceImpl.hpp"
4
5 struct mof::AmbientLight::Impl{
6         mof::Color lastAmbient;
7         bool enable;
8
9         Impl();
10         ~Impl();
11         void reflect( mof::Color color , bool force = false);
12 };
13
14 mof::AmbientLight::Impl::Impl()
15 : enable(true)
16 {
17 }
18
19 mof::AmbientLight::Impl::~Impl(){
20         
21 }
22
23 mof::AmbientLight::AmbientLight( mof::Color4f color )
24 : m_pImpl( new Impl() ) , mof::Light() 
25 {
26         setDiffuseColor(color);
27         m_pImpl->reflect( m_diffuseColor->value(m_frame).toColorCode() , true);
28 }
29
30
31 mof::AmbientLight::~AmbientLight(){
32         try{
33                 setEnable(false);//\97á\8aO\82ð\93\8a\82°\82é\82©\82à
34         }catch(std::exception& ){
35         }
36 }
37
38 void mof::AmbientLight::setFrameNumber(mof::FrameNumber frame){
39         m_frame = frame;
40         m_pImpl->reflect(  m_diffuseColor->value(m_frame).toColorCode() );
41         
42 }
43
44 void mof::AmbientLight::nextFrame(){
45         setFrameNumber(m_frame + 1);
46 }
47
48 void mof::AmbientLight::prevFrame(){
49         if(m_frame > 0)setFrameNumber(m_frame - 1);
50 }
51
52
53 void mof::AmbientLight::setEnable(bool enable){
54         if(!m_pImpl->enable && enable){
55                 m_pImpl->enable = enable;
56                 m_pImpl->reflect(  m_diffuseColor->value(m_frame).toColorCode() );
57         }
58         else if(m_pImpl->enable && !enable){
59                 m_pImpl->enable = enable;
60                 m_pImpl->reflect( m_diffuseColor->value(m_frame).toColorCode() );
61         }
62 }
63
64
65 void mof::AmbientLight::Impl::reflect(mof::Color color , bool force){
66         //\95¡\90\94\82Ì\83A\83\93\83r\83G\83\93\83g\82ð\83T\83|\81[\83g\82·\82é\82×\82«
67         mof::Color ambient = color;
68         if(!enable)ambient = mof::createColor(0 , 0 , 0);
69
70         if(ambient != lastAmbient || force){
71                 mof::GraphicsDevice::getRawDevice()->SetRenderState(D3DRS_AMBIENT , ambient);
72                 lastAmbient = ambient;
73         }
74 }