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
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
24 worldMatrix(mof::makeConstantHandler(mof::Matrix3D::createIdentity()))
\r
29 for(std::vector<mof::Board*>::iterator itr = list.begin() ;
\r
38 ::CharacterBoard::CharacterBoard( const mof::tstring& text)
\r
39 : m_pImpl(new Impl())
\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
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
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
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
66 ::CharacterBoard::~CharacterBoard(){
\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
75 (*itr)->setFrameNumber(frame);
\r
80 void ::CharacterBoard::nextFrame(){
\r
81 setFrameNumber(m_pImpl->frame + 1);
\r
85 void ::CharacterBoard::prevFrame(){
\r
86 if(m_pImpl->frame > 0)setFrameNumber(m_pImpl->frame - 1);
\r
90 void ::CharacterBoard::update(){
\r
92 for(std::vector<mof::Board*>::iterator itr = m_pImpl->list.begin() ;
\r
93 itr != m_pImpl->list.end() ;
\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
106 handlers.push_back( handler);
\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
116 handlers.push_back( mof::makeConstantHandler(
\r
117 mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0.5f , 0.01f))
\r
119 handlers.push_back(mof::makeConstantHandler(
\r
120 mof::Matrix3D::createRotation(mof::Vector3D(0 , mof::deg2rad(180) , 0))
\r
122 handlers.push_back(handler);
\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
131 handlers.push_back( mof::makeConstantHandler(
\r
132 mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0.5f , -0.01f))
\r
134 handlers.push_back( handler);
\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
146 mof::Matrix3D CharacterBoard::getWorldMatrix() const{
\r
147 return m_pImpl->worldMatrix->getValue(m_pImpl->frame);
\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
155 void ::CharacterBoard::append(std::list<mof::Board*>& list_){
\r
156 list_.insert(list_.begin() , m_pImpl->list.begin(), m_pImpl->list.end());
\r
160 void ::CharacterBoard::setFinishColor(mof::FrameNumber delay , mof::FrameNumber interval){
\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
166 m_pImpl->list.at(0)->setColor(
\r
167 mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))
\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
176 m_pImpl->list.at(2)->setColor(
\r
177 mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))
\r
184 void ::CharacterBoard::setPartColor(mof::FrameNumber delay , mof::FrameNumber interval){
\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
190 m_pImpl->list.at(0)->setColor(
\r
191 mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))
\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
200 m_pImpl->list.at(1)->setColor(
\r
201 mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))
\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
210 m_pImpl->list.at(2)->setColor(
\r
211 mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]))
\r