OSDN Git Service

fix moflib2.0 build system
[moflib/moflib.git] / saisei-1.0 / rpg / rpg / oldcode / CharacterBoard.cpp~
1 #include "CharacterBoard.hpp"\r
2 #include "mof/Matrix3D.hpp"\r
3 #include "mof/ConsoleIO.hpp"\r
4 #include "mof/KeyFrameAnimation.hpp"\r
5 #include "mof/RotationAnimation3D.hpp"\r
6 #include "mof/TranslationAnimation3D.hpp"\r
7 #include "mof/ScalingAnimation3D.hpp"\r
8 #include "mof/Constant.hpp"\r
9 #include "mof/CascadingAnimation.hpp"\r
10 #include "mof/LoopAnimation.hpp"\r
11 #include "mof/Interpolation.hpp"\r
12 #include "mof/Font.hpp"\r
13 #include "mof/Vector2D.hpp"\r
14 #include <vector>\r
15 \r
16 \r
17 struct ::CharacterBoard::Impl{\r
18     std::vector<mof::Board*> list;\r
19     mof::Animation<mof::Matrix3D>::Handler worldMatrix;\r
20     mof::FrameNumber frame;\r
21 \r
22     Impl()\r
23         :  frame(0) ,\r
24         worldMatrix(mof::makeConstantHandler(mof::Matrix3D::createIdentity())) \r
25     {\r
26     }\r
27 \r
28     ~Impl(){\r
29         for(std::vector<mof::Board*>::iterator itr = list.begin() ;\r
30             itr != list.end() ;\r
31             ++itr ){\r
32             delete *itr;\r
33         }\r
34         \r
35     }\r
36 };\r
37 \r
38 ::CharacterBoard::CharacterBoard( const mof::tstring& text)\r
39 : m_pImpl(new Impl())\r
40 {\r
41     \r
42 \r
43     mof::Board* pBoard;\r
44     pBoard = new mof::Board();\r
45     pBoard->setColor(mof::makeConstantHandler(mof::Color4f(0.3f , 0.3f , 1)));\r
46     m_pImpl->list.push_back(pBoard);\r
47 \r
48     pBoard = new mof::Board();\r
49     pBoard->setColor(mof::makeConstantHandler(mof::Color4f(0.6f , 0.6f , 1)));\r
50     m_pImpl->list.push_back(pBoard);\r
51 \r
52     mof::Font font(mof::Font::MS_GOTHIC , 70);\r
53     boost::shared_ptr<mof::PixelMap> pPixelMap( font.createText(text) );\r
54     mof::Vector2D sizeVec(pPixelMap->shape()[0] , pPixelMap->shape()[1]);\r
55     boost::shared_ptr<mof::Texture> pTexture(new mof::Texture( pPixelMap));\r
56     float endX = static_cast<float>(pPixelMap->shape()[0]) / pTexture->getWidth();\r
57     float endY = static_cast<float>(pPixelMap->shape()[1]) / pTexture->getHeight();\r
58 \r
59     pBoard = new mof::Board();\r
60     pBoard->setColor(mof::makeConstantHandler(mof::Color4f(1 , 1 , 1)));\r
61     pBoard->setTexture(pTexture);\r
62     pBoard->setTextureCoordinates(mof::Rectangle<float>(0 , 0 , endX , endY));\r
63     m_pImpl->list.push_back(pBoard);\r
64 }\r
65 \r
66 ::CharacterBoard::~CharacterBoard(){\r
67 \r
68 }\r
69 \r
70 void ::CharacterBoard::setFrameNumber(mof::FrameNumber frame){\r
71     m_pImpl->frame = frame;\r
72     for(std::vector<mof::Board*>::iterator itr = m_pImpl->list.begin() ;\r
73         itr != m_pImpl->list.end() ;\r
74         ++itr ){\r
75             (*itr)->setFrameNumber(frame);\r
76     }\r
77 }\r
78 \r
79 \r
80 void ::CharacterBoard::nextFrame(){\r
81     setFrameNumber(m_pImpl->frame + 1);\r
82 }\r
83 \r
84 \r
85 void ::CharacterBoard::prevFrame(){\r
86     if(m_pImpl->frame > 0)setFrameNumber(m_pImpl->frame - 1);\r
87 }\r
88 \r
89 \r
90 void ::CharacterBoard::update(){\r
91     m_pImpl->frame++;\r
92     for(std::vector<mof::Board*>::iterator itr = m_pImpl->list.begin() ;\r
93         itr != m_pImpl->list.end() ;\r
94         ++itr ){\r
95             (*itr)->update();\r
96     }\r
97 }\r
98 \r
99 \r
100 void ::CharacterBoard::setWorldMatrix(const mof::Animation<mof::Matrix3D>::Handler& handler){\r
101     m_pImpl->worldMatrix = handler;\r
102     std::vector<mof::Animation<mof::Matrix3D>::Handler> handlers;\r
103     handlers.push_back( mof::makeConstantHandler(\r
104         mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0.5f , 0))\r
105         ));\r
106     handlers.push_back( handler);\r
107     \r
108     \r
109     m_pImpl->list.at(0)->setWorldMatrix(\r
110         mof::Animation<mof::Matrix3D>::Handler(\r
111         new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlers.front() , handlers.back())\r
112         )\r
113         );\r
114 \r
115     handlers.clear();\r
116     handlers.push_back( mof::makeConstantHandler(\r
117         mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0.5f , 0.01f))\r
118         ));\r
119     handlers.push_back(mof::makeConstantHandler(\r
120         mof::Matrix3D::createRotation(mof::Vector3D(0 , mof::deg2rad(180) , 0))\r
121         ));\r
122     handlers.push_back(handler);\r
123 \r
124     m_pImpl->list.at(1)->setWorldMatrix(\r
125         mof::Animation<mof::Matrix3D>::Handler(\r
126         new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlers.front() , handlers.back())\r
127         )\r
128         );\r
129 \r
130     handlers.clear();\r
131     handlers.push_back( mof::makeConstantHandler(\r
132         mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0.5f , -0.01f))\r
133         ));\r
134     handlers.push_back( handler);\r
135     \r
136     \r
137     m_pImpl->list.at(2)->setWorldMatrix(\r
138         mof::Animation<mof::Matrix3D>::Handler(\r
139         new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlers.front() , handlers.back())\r
140         )\r
141         );\r
142     \r
143 }\r
144 \r
145 \r
146 mof::Matrix3D CharacterBoard::getWorldMatrix() const{\r
147     return m_pImpl->worldMatrix->getValue(m_pImpl->frame);\r
148 }\r
149 \r
150 mof::Vector3D CharacterBoard::getPosition() const{\r
151     mof::Matrix3D m = getWorldMatrix();\r
152     return mof::Vector3D(m.at(3 , 0) , m.at(3 , 1) , m.at(3 , 2));\r
153 }\r
154 \r
155 void ::CharacterBoard::append(std::list<mof::Board*>& list_){\r
156     list_.insert(list_.begin() , m_pImpl->list.begin(), m_pImpl->list.end());\r
157     \r
158 }\r
159 \r
160 void ::CharacterBoard::setFinishColor(mof::FrameNumber delay , mof::FrameNumber interval){\r
161     {\r
162         std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {\r
163             std::pair<mof::FrameNumber , mof::Color4f>( delay , mof::Color4f(0.3f , 0.3f , 1) ) ,\r
164             std::pair<mof::FrameNumber , mof::Color4f>( delay + interval , mof::Color4f(1 , 1 , 1) )\r
165         };\r
166         m_pImpl->list.at(0)->setColor(\r
167             mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))\r
168             );\r
169     }\r
170 \r
171     {\r
172         std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {\r
173             std::pair<mof::FrameNumber , mof::Color4f>( delay , mof::Color4f(1 , 1 , 1) ) ,\r
174             std::pair<mof::FrameNumber , mof::Color4f>( delay + interval , mof::Color4f(0.3f , 0.3f , 1) )\r
175         };\r
176         m_pImpl->list.at(2)->setColor(\r
177             mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))\r
178             );\r
179     }    \r
180 \r
181 }\r
182 \r
183 \r
184 void ::CharacterBoard::setPartColor(mof::FrameNumber delay , mof::FrameNumber interval){\r
185     {\r
186         std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {\r
187             std::pair<mof::FrameNumber , mof::Color4f>( delay , mof::Color4f(0 , 1 , 1 , 1) ) ,\r
188             std::pair<mof::FrameNumber , mof::Color4f>( delay + interval , mof::Color4f(0 , 1 , 1 , 1) )\r
189         };\r
190         m_pImpl->list.at(0)->setColor(\r
191             mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))\r
192             );\r
193     }\r
194 \r
195     {\r
196         std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {\r
197             std::pair<mof::FrameNumber , mof::Color4f>( delay , mof::Color4f(0 , 1 , 1 , 1) ) ,\r
198             std::pair<mof::FrameNumber , mof::Color4f>( delay + interval , mof::Color4f(0 , 1 , 1 , 1) )\r
199         };\r
200         m_pImpl->list.at(1)->setColor(\r
201             mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))\r
202             );\r
203     }\r
204 \r
205     {\r
206         std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {\r
207             std::pair<mof::FrameNumber , mof::Color4f>( delay , mof::Color4f(0.8f , 0.5f , 0.2f) ) ,\r
208             std::pair<mof::FrameNumber , mof::Color4f>( delay + interval , mof::Color4f(0.8f , 0.5f , 0.2f) )\r
209         };\r
210         m_pImpl->list.at(2)->setColor(\r
211             mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))\r
212             );\r
213     }    \r
214 \r
215 }\r