]> Dogcows Code - chaz/yoink/blob - src/Moof/Transition.hh
07addc313c8d9fc4093f46e205e352dc563d83c0
[chaz/yoink] / src / Moof / Transition.hh
1
2 /*******************************************************************************
3
4 Copyright (c) 2009, Charles McGarvey
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9
10 * Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12 * Redistributions in binary form must reproduce the above copyright notice,
13 this list of conditions and the following disclaimer in the documentation
14 and/or other materials provided with the distribution.
15
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27 *******************************************************************************/
28
29 #ifndef _MOOF_TRANSITION_HH_
30 #define _MOOF_TRANSITION_HH_
31
32 #include <boost/shared_ptr.hpp>
33
34 #include <Moof/Engine.hh>
35 #include <Moof/Interpolator.hh>
36 #include <Moof/Layer.hh>
37 #include <Moof/Log.hh>
38 #include <Moof/Math.hh>
39 #include <Moof/OpenGL.hh>
40 #include <Moof/Texture.hh>
41
42
43 namespace Mf {
44
45
46 template <typename T>
47 class Transition : public Layer
48 {
49 LayerP mTo;
50 LayerP mFrom;
51
52 T mInterp;
53
54 public:
55
56 Transition(LayerP t, LayerP f, const T& interp) :
57 mTo(t),
58 mFrom(f),
59 mInterp(interp) {}
60
61 typedef boost::shared_ptr<Transition> Ptr;
62
63 static Ptr alloc(LayerP t, LayerP f, const T& interp)
64 {
65 return Ptr(new Transition(t, f, interp));
66 }
67
68
69 void popped(Engine& engine)
70 {
71 if (mTo) engine.push(mTo);
72 }
73
74 void update(Engine& engine, Scalar t, Scalar dt)
75 {
76 mInterp.update(t, dt);
77
78 if (mFrom) mFrom->update(engine, t, dt);
79 if (mTo) mTo->update(engine, t, dt);
80
81 if (mInterp.isDone())
82 {
83 // to should /replace/ this
84 engine.pop(this);
85 }
86 }
87
88 void drawFade(Scalar alpha) const
89 {
90 // DRAW FADE
91 glDisable(GL_DEPTH_TEST);
92 glDisable(GL_ALPHA_TEST);
93 glEnable(GL_BLEND);
94 glMatrixMode(GL_PROJECTION);
95 glPushMatrix();
96 glLoadIdentity();
97 glMatrixMode(GL_MODELVIEW);
98 glPushMatrix();
99 glLoadIdentity();
100 glColor(1.0, 1.0, 1.0, alpha);
101 Mf::Texture::resetBind();
102
103 //glRectf(-1.0f, -1.0f, 1.0f, 1.0f);
104 glBegin(GL_QUADS);
105 glVertex(-1.0, -1.0, -0.1);
106 glVertex(1.0, -1.0, -0.1);
107 glVertex(1.0, 1.0, -0.1);
108 glVertex(-1.0, 1.0, -0.1);
109 glEnd();
110
111 glDisable(GL_BLEND);
112 glEnable(GL_DEPTH_TEST);
113 glEnable(GL_ALPHA_TEST);
114
115 glMatrixMode(GL_PROJECTION);
116 glPopMatrix();
117 glMatrixMode(GL_MODELVIEW);
118 glPopMatrix();
119 }
120
121 void draw(Engine& engine, Scalar alpha) const
122 {
123 Scalar a = mInterp.getState(alpha);
124 logDebug << "transition state: " << a << std::endl;
125
126 //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
127
128 if (mFrom)
129 {
130 glPushMatrix();
131 glLoadIdentity();
132 glRotate(180.0 * a, 0.0, 1.0, 0.0);
133 mFrom->draw(engine, alpha);
134 glPopMatrix();
135 }
136 //drawFade(a);
137
138 if (mTo)
139 {
140 glPushMatrix();
141 glLoadIdentity();
142 glRotate(180.0 * (1.0 - a), 0.0, 1.0, 0.0);
143 mTo->draw(engine, alpha);
144 glPopMatrix();
145 }
146 //drawFade(1.0 - a);
147 }
148
149 bool handleEvent(Engine& engine, const Event& event)
150 {
151 if (mTo)
152 {
153 return mTo->handleEvent(engine, event);
154 }
155 else if (mFrom)
156 {
157 return mFrom->handleEvent(engine, event);
158 }
159 return false;
160 }
161 };
162
163
164 } // namespace Mf
165
166 #endif // _MOOF_TRANSITION_HH_
167
168 /** vim: set ts=4 sw=4 tw=80: *************************************************/
169
This page took 0.038821 seconds and 3 git commands to generate.