OSDN Git Service

Merge branch 'master' of o_ggy@git.sourceforge.jp:/gitroot/moflib/moflib
[moflib/moflib.git] / saisei-1.0 / rpg / rpg / oldcode / TestScene.cpp~
1 #include "TestScene.hpp"
2 #include "mof/GraphicsDevice.hpp"
3 #include <vector>
4 #include "mof/VertexBuffer.hpp"
5 #include "mof/AmbientLight.hpp"
6 #include "mof/MaterialBuilder.hpp"
7 #include "mof/Material.hpp"
8 #include "mof/Camera.hpp"
9 #include "mof/Texture.hpp"
10 #include "mof/MeshBuilder.hpp"
11 #include "mof/Graphics3D.hpp"
12 #include "mof/mofAnimations.hpp"
13 #include "mof/EventScheduler.hpp"
14 #include "mof/EventCondition.hpp"
15 #include "mof/Board.hpp"
16 #include "mof/Font.hpp"
17 #include "CharacterBoard.hpp"
18 #include <vector>
19 #include <boost/bind.hpp>
20 #include <math.h>
21 #include <lua.hpp>
22 #include "mof/Finalizer.hpp"
23
24 namespace 
25 {
26
27     mof::AmbientLight* m_pLight;
28     mof::Camera* m_pCamera;
29     boost::shared_ptr<mof::Texture> m_pTexture;
30     std::vector<::CharacterBoard*> m_modelList;
31     mof::Graphics3D* m_pBox;
32     mof::EventScheduler* m_pScheduler;
33     mof::Animation<mof::Color4f>::Handler m_backgroundColor;
34     mof::FrameNumber m_backgroundColorFrame;
35     mof::tstring m_part;
36 };
37
38
39
40     
41 namespace TestScene
42 {
43
44     void begin(){
45         std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
46     
47         {
48         std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[4];
49         keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 25 , mof::Vector3D( mof::deg2rad(-90) , 0 , 0));
50         keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 50 , mof::Vector3D( mof::deg2rad(-80) , 0 , 0));
51         keyFrames[2] = std::pair<mof::FrameNumber , mof::Vector3D>( 75 , mof::Vector3D( mof::deg2rad(-25) , 0 , 0));
52         keyFrames[3] = std::pair<mof::FrameNumber , mof::Vector3D>( 100 , mof::Vector3D( mof::deg2rad(0) , 0 , 0));
53         mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[3]));
54         handlerList.push_back(handler);
55         }
56         {
57         mof::Animation<mof::Matrix3D>::Handler handler(
58             mof::constantHandler(mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0 , -4.5f)))
59             );
60         handlerList.push_back(handler);
61         }
62         {
63         std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[3];
64         keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D( 0 , mof::deg2rad(70) , 0));
65         keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D( 0 , mof::deg2rad(360) , 0));
66         mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
67         handler = mof::Animation<mof::Matrix3D>::Handler(new mof::LoopAnimation<mof::Matrix3D>(handler , 200));
68         handlerList.push_back(handler);
69         }
70     
71         int size = handlerList.size();
72         handlerList.resize(size + 1);
73
74         mof::tstring title[] = { _T("\82R") , _T("\94N") , _T("\91O") , _T("\82É") , _T("\8dÁ") , _T("\90Ü") , _T("\82µ") ,
75             _T("\82½") , _T("\82q") , _T("\82o") , _T("\82f") , _T("\8aJ") , _T("\94­") , _T("\82ð") , _T("\8dÄ") , _T("\8aJ") ,
76             _T("\82µ") , _T("\82Ä") , _T("\82Ý") , _T("\82é") };
77
78         for(int i = 0 ; i < 20 ; i++)
79         {
80             m_modelList.push_back(new ::CharacterBoard( title[i]));
81             {
82             mof::Animation<mof::Matrix3D>::Handler handler(
83                 mof::constantHandler(mof::Matrix3D::createRotation(mof::Vector3D(0 , mof::deg2rad(-360.0f/20 * i) , 0)))
84                 );
85             handlerList.at(size) = handler;
86             }
87             mof::Animation<mof::Matrix3D>::Handler handler(new mof::CascadingAnimation<mof::Matrix3D >(handlerList.front() , handlerList.back()));
88             m_modelList.at(i)->setWorldMatrix(handler);
89         }
90
91     
92         {
93         mof::MeshBuilder meshBuilder( "model/demo/box.x");
94         m_pBox = meshBuilder.construct();
95         handlerList.clear();
96     
97         {
98         std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[2];
99         keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D( 0 , 0 , 0));
100         keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D( mof::deg2rad(360) , mof::deg2rad(360) , mof::deg2rad(360)));
101         mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
102         handler = mof::Animation<mof::Matrix3D>::Handler(new mof::LoopAnimation<mof::Matrix3D>(handler , 130));
103         handlerList.push_back(handler);
104         }
105         mof::Animation<mof::Matrix3D>::Handler handler(new mof::CascadingAnimation<mof::Matrix3D >(handlerList.front() , handlerList.back()));
106         m_pBox->setWorldMatrix(handler);
107         }
108
109         {
110             std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[2];
111             keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 10.5f , -5));
112             keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D(0 , 1.5f , -10 ));
113             mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[1]));
114             m_pCamera->setEye(handler);
115         }
116     
117     }
118     
119     void showTitle(){
120         std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
121         mof::Animation<mof::Matrix3D>::Handler handler;
122         for(unsigned int i = 0 ; i < m_modelList.size() ; ++i){
123             handlerList.clear();
124             mof::Matrix3D matrix = m_modelList.at(i)->getWorldMatrix();
125
126             {
127                 mof::Vector3D a = mof::Vector3D(1 , 0 , 0) * matrix;
128                 float rad = static_cast<float>(atan2( -a.x , -a.z));
129                 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
130                         std::pair<mof::FrameNumber , mof::Vector3D>( 20 , mof::Vector3D(0 , 0 , 0) ) ,
131                         std::pair<mof::FrameNumber , mof::Vector3D>( 50 , mof::Vector3D(0 , -rad  , 0))
132                 };
133                 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
134                 handlerList.push_back(handler);
135             }
136                 
137             {
138                 handler = mof::constantHandler(matrix);
139                 handlerList.push_back(handler);
140             }
141                 
142                 
143             {
144                 float y = (i > 7) ? -1.0f : 0;
145                 float x = (i > 7) ? i - 8.0f : i;
146                 mof::Vector3D position(1.0f * x - 20 , y , -5);
147                 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
148                         std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 0 , 0) ) ,
149                         std::pair<mof::FrameNumber , mof::Vector3D>( 50 , position - m_modelList.at(i)->getPosition())
150                 };
151                 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::TranslationAnimation3D(keyFrames[0] , keyFrames[1]));
152                 handlerList.push_back(handler);
153             }
154             handler = mof::Animation<mof::Matrix3D>::Handler(
155                 new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlerList.front() , handlerList.back())
156                 );
157             m_modelList.at(i)->setWorldMatrix(handler);
158             m_modelList.at(i)->setFinishColor(70 , 20);
159             m_modelList.at(i)->setFrameNumber(0);
160         }
161     
162         
163
164         {
165             mof::Vector3D eye = m_pCamera->getEye();
166             std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
167                 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , eye) ,
168                 std::pair<mof::FrameNumber , mof::Vector3D>( 20 , eye) ,
169                 std::pair<mof::FrameNumber , mof::Vector3D>( 60 , mof::Vector3D(-16 , 1.0f , eye.z + 1)) ,
170                 std::pair<mof::FrameNumber , mof::Vector3D>( 70 , mof::Vector3D(-14 , -0.5f , eye.z - 8 ))
171             };
172             mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[3]));
173             m_pCamera->setEye(handler);
174         }
175             
176         {
177             std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
178                 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 0 , 0)) ,
179                 std::pair<mof::FrameNumber , mof::Vector3D>( 20 , mof::Vector3D(0 , 0 , 0)) ,
180                 std::pair<mof::FrameNumber , mof::Vector3D>( 60 , mof::Vector3D(-14 , 0.0f , 0 ))
181             };
182             mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[2]));
183             m_pCamera->setCenter(handler);
184         }
185         m_pCamera->setFrameNumber(0);
186
187         {
188             std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {
189                 std::pair<mof::FrameNumber , mof::Color4f>( 70 , mof::Color4f(mof::createColor(0 , 20 , 55)) ) ,
190                 std::pair<mof::FrameNumber , mof::Color4f>( 90 , mof::Color4f(mof::createColor(255 , 255 , 255)) )
191             };
192             m_backgroundColor = mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]));
193             m_backgroundColorFrame = 0;
194         }
195     }
196
197     void addPart(){
198         std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
199         mof::Animation<mof::Matrix3D>::Handler handler;
200         {
201             
202             handlerList.clear();
203             std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
204                 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , mof::deg2rad(270) , 0) ) ,
205                 std::pair<mof::FrameNumber , mof::Vector3D>( 40 , mof::Vector3D(0 , mof::deg2rad(360) , 0))
206                 };
207             handler = mof::Animation<mof::Matrix3D>::Handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
208             handlerList.push_back(handler);
209
210             handler = mof::constantHandler(mof::Matrix3D::createScaling(mof::Vector3D(4 , 1 , 1)));
211             handlerList.push_back(handler);
212             handler = mof::constantHandler(mof::Matrix3D::createTranslation(mof::Vector3D(-10 , -2 , -5)));
213             handlerList.push_back(handler);
214             handler = mof::Animation<mof::Matrix3D>::Handler(
215                 new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlerList.front() , handlerList.back())
216                 );
217             ::CharacterBoard* pPartBoard = new ::CharacterBoard( m_part);
218             pPartBoard->setWorldMatrix(handler);
219             pPartBoard->setPartColor(0 , 1);
220             m_modelList.push_back(pPartBoard);
221         }
222     }
223
224
225
226
227
228
229 void initialize( )
230 {
231     m_pLight = NULL;
232     m_pCamera = NULL;
233     m_pBox = NULL;
234     m_pScheduler = NULL;
235     m_backgroundColorFrame = 0;
236     m_part = _T("part7");
237     
238     
239
240     mof::GraphicsDevice::lightEnable(true);
241     m_pLight = new mof::AmbientLight(  mof::Color4f(mof::createColor(255 , 255 , 255)));
242
243     m_pCamera = new mof::Camera(mof::Vector3D(0 , 0.5f , -10) , mof::Vector3D(0 , 0 , 0) , mof::Vector3D(0 , 1 , 0));
244     m_backgroundColor = 
245         mof::Animation<mof::Color4f>::Handler(mof::constantHandler(mof::Color4f(mof::createColor(0 , 20 , 55))));
246
247     m_pScheduler = new mof::EventScheduler();
248     m_pScheduler->addEvent( 125 ,  &::TestScene::showTitle );
249     m_pScheduler->addEvent( 125+70 ,  &::TestScene::addPart );
250     begin();
251
252     
253 }
254
255
256 void finalize(){
257         for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
258             itr != m_modelList.end() ;
259             ++itr ){
260             delete *itr;
261         }
262         delete m_pCamera;
263         delete m_pBox;
264         delete m_pScheduler;
265         delete m_pLight;
266     }
267
268
269
270
271 void update(){
272     for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
273         itr != m_modelList.end() ;
274         ++itr ){
275         (*itr)->update();
276     }
277     m_pBox->update();
278     m_pScheduler->update();
279     m_pCamera->nextFrame();
280     m_backgroundColorFrame++;
281 }
282
283
284
285 void draw()
286 {
287     mof::GraphicsDevice::lightEnable(true);
288     //m_pGraphics->setZBuffer(false);
289     mof::GraphicsDevice::setViewTransform(m_pCamera->getViewMatrix());
290     mof::GraphicsDevice::clearRenderTarget(m_backgroundColor->getValue(m_backgroundColorFrame).toColorCode());
291     mof::GraphicsDevice::clearZBuffer();
292     mof::GraphicsDevice::setAlphaBlendingMode(mof::GraphicsDevice::BLENDING_MODE_ALPHA);
293     
294     //m_pBox->draw();
295     mof::GraphicsDevice::lightEnable(false);
296     std::list<mof::Board*> boardList;
297
298     for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
299         itr != m_modelList.end() ;
300         ++itr ){
301             (*itr)->append(boardList);
302     }
303
304     for(std::list<mof::Board*>::iterator itr = boardList.begin() ;
305         itr != boardList.end() ;
306         ++itr ){
307             (*itr)->draw();
308     }
309
310
311
312 }
313
314 } // namespace TestScene