Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

Animator.h

Go to the documentation of this file.
00001 //345678901234567890123456789012345678901234567890123456789012345678901234567890
00002 // Animator.h
00003 //
00004 // Author: Richard van Balen
00005 #ifndef OglGui_Animator_h
00006 #define OglGui_Animator_h
00007 
00008 #ifndef OglGui_Window_h
00009 #include "OglGui/Window.h"
00010 #endif
00011 
00012 #ifndef OglGui_time_included
00013 #include <time.h>
00014 #define OglGui_time_included
00015 #endif
00016 
00017 namespace OglGui {
00018 
00019 class Animator : public Window
00020 {
00021 public:
00022     Animator(Window* parent,int x,int y,int w,int h):
00023         Window(parent, x, y, w, h)
00024     {
00025         Init();
00026     }
00027 
00028     void Animate()
00029     {
00030         SetVisible(true);
00031         Clear();
00032         mCnt = 120;
00033         Prepare(mOglWnd->parent);
00034         SetAlwaysDraw(true);
00035     }
00036 
00037     void Prepare(OGLWND* oglWnd)
00038     {
00039         if (!oglWnd)
00040             return;
00041 
00042         LIST*   obj;
00043         OGLWND* child;
00044         for (obj=oglWnd->wndList; obj; obj=obj->next)
00045         {
00046             child = (OGLWND*) obj->info;
00047             if (child==mOglWnd)
00048                 continue;
00049             int userData = (long long) child->UserData1;
00050             mOglWindows.push_back(child);
00051             mXs.push_back(child->x);
00052             mYs.push_back(child->y);
00053             int offX = 600 - rand() % 1200;
00054             int offY = 600 - rand() % 1200;
00055             mDXs.push_back(offX/(mCnt*1.f));
00056             mDYs.push_back(offY/(mCnt*1.f));
00057             if (child->wndList!=0)
00058                 Prepare(child);
00059         }
00060     }
00061 
00062     virtual void DisplayFunc()
00063     {
00064         Window::DisplayFunc();
00065         if (!mInitialized)
00066         {
00067             mInitialized = true;
00068             Animate();
00069         }
00070 
00071         if (mCnt>=0)
00072         {
00073             int sz = mOglWindows.size();
00074             for (int i=0; i<sz; i++)
00075             {
00076                 mOglWindows[i]->x = mXs[i] + sin(DEG2RAD(2*mCnt)) * mCnt * mDXs[i];
00077                 mOglWindows[i]->y = mYs[i] + cos(DEG2RAD(2*mCnt)) * mCnt * mDYs[i];
00078             }
00079             UpdateScene();
00080         }
00081         if (--mCnt==-2)
00082         {
00083             SetAlwaysDraw(false);
00084             UpdateScene();
00085             Clear();
00086             SetVisible(false);
00087         }
00088     }
00089 
00090     void Clear()
00091     {
00092         mOglWindows.clear();
00093         mXs.clear();
00094         mYs.clear();
00095         mDXs.clear();
00096         mDYs.clear();
00097     }
00098 
00099 
00100 private:
00101     std::vector<OGLWND*>    mOglWindows;
00102     std::vector<int>        mXs;
00103     std::vector<int>        mYs;
00104     std::vector<float>      mDXs;
00105     std::vector<float>      mDYs;
00106     int                     mCnt;
00107     int                     mInitialized;
00108     int                     mRecurs;
00109 
00110     void Init()
00111     {
00112         srand(clock());
00113         mInitialized = false;
00114         mRecurs = 0;
00115     }
00116 
00117 };
00118 
00119 } // Namespace OglGui
00120 #endif
00121 

Generated on Fri Mar 19 09:31:33 2010 for ImpalaSrc by  doxygen 1.5.1