Morph-SynRJ

view efx_screen0.cxx @ 0:22de913c2d84

morph-synrj intro
author "Cedric Pinson <cedric.pinson@alcove.fr> <mornifle@plopbyte.net>"
date Tue Nov 27 15:23:52 2007 +0100 (2007-11-27)
parents
children
line source
1 #include "efx_screen0.h"
2 #include "sys_assert.h"
3 #include "mth_vector3.h"
4 #include "gl_header.h"
5 #include "cmn_intro.h"
9 efxScreen0_t::efxScreen0_t()
10 {
11 }
14 void efxScreen0_t::Init()
15 {
17 #ifndef NO_LOADER
18 loadingLevel=0;
19 textureStart=txtCreateObliqueTexture(256,128,45,"Generating");
20 textureCurrent=txtCreateObliqueTexture(256,128,45);
21 textureEnd=txtCreateObliqueTexture(256,128,45,"finish");
22 #endif
23 int size = 256;
24 float div=1.0/size;
25 backgroundTexture1=txtCreatePerlin2d(size,size,div,div,0.8,10);
26 backgroundTexture2=txtCreatePerlin2d(size,size,div,div,0.8,5);
28 InitDesign();
29 }
32 void efxScreen0_t::InitDesign()
33 { //0123456789a
34 const char* text[]= {
35 "st",
36 " ( )",
37 " 2k4",
38 " art ",
39 };
40 const int NbCharsText=11;
41 const int PosYText=25;
43 const char* text1[]= {
44 "syn",
45 " rj",
46 " [ ]",
47 "presents",
48 };
49 const int NbCharsText1=7;
50 const int PosYText1=-20;
52 const float ScaleFontX=0.9;
53 const float ScaleFontY=2;
54 const int NbDesignElements=6;
55 const int Repeat=4;
57 design.Init(NbDesignElements*Repeat);
58 designElements=new cmnDesignElementFont_t[NbDesignElements*Repeat];
61 font->SetScaleX(ScaleFontX);
62 font->SetScaleY(ScaleFontY);
64 MakeSync(0,0,text,NbCharsText,PosYText,ScaleFontX,ScaleFontY);
65 MakeSync(4.66,3,text,NbCharsText,PosYText,ScaleFontX,ScaleFontY);
66 MakeSync(6.149,6,text1,NbCharsText1,PosYText1,ScaleFontX,ScaleFontY);
67 MakeSync(10.75,9,text1,NbCharsText1,PosYText1,ScaleFontX,ScaleFontY);
69 int index2=Repeat*3;
70 designElements[index2].Init(0);
71 designElements[index2].position.Init(-(NbCharsText*font->SizeOfCharX()/2),PosYText,0);
72 designElements[index2].target.Init(designElements[index2].position);
73 designElements[index2].text=text[3];
74 designElements[index2].endLife=1e5;
75 designElements[index2].factor=0;
76 designElements[index2].alphaFactor=0.2;
77 designElements[index2].start=3.3;
78 designElements[index2].alpha=0;
79 designElements[index2].scaley=ScaleFontY;
80 designElements[index2].scalex=ScaleFontX;
81 design.AddElement(&designElements[index2]);
82 index2++;
85 font->SetScaleX(ScaleFontX*0.6);
86 font->SetScaleY(ScaleFontY*0.6);
88 designElements[index2].Init(0);
89 designElements[index2].position.Init(-(NbCharsText1*font->SizeOfCharX()/2),PosYText1-40,0);
90 designElements[index2].target.Init(designElements[index2].position);
91 designElements[index2].text=text1[3];
92 designElements[index2].endLife=1e5;
93 designElements[index2].factor=0;
94 designElements[index2].alphaFactor=0.2;
95 designElements[index2].start=9.2;
96 designElements[index2].alpha=0;
97 designElements[index2].scaley=ScaleFontY*0.6;
98 designElements[index2].scalex=ScaleFontX*0.6;
99 design.AddElement(&designElements[index2]);
102 }
104 void efxScreen0_t::Update()
105 {
107 const float First=3.3;
108 const float Second=6.2;
109 const float Third=9.2;
110 const int ElementToUpdate=12; // very bad :(
111 float time=Timer->GetRealTime();
113 if (time>Second && time<Third)
114 designElements[ElementToUpdate].alphaFactor=-0.15;
115 else if (time>Third)
116 designElements[ElementToUpdate].alphaFactor=0.2;
119 design.Update();
120 }
123 void efxScreen0_t::MakeSync(float _offset,int _index,const char** text,int _nbChars,float StartY,float _scaleX,float _scaleY)
124 {
125 const int NbDesignElements=3;
126 const float StartX=-(font->SizeOfCharX()*_nbChars)/2; //-(11*16/2); // 11*16/2-16/2
127 //const float StartY=0;
129 int index2;
130 for (int i=0;i<NbDesignElements;i++) {
131 index2=_index+i;
132 designElements[index2].Init(0);
133 designElements[index2].position.Init(StartX,StartY,100);
134 designElements[index2].target.Init(StartX,StartY,0);
135 designElements[index2].text=text[i];
136 designElements[index2].endLife=1e5;
137 designElements[index2].factor=5;
138 designElements[index2].start=0;
139 designElements[index2].alpha=1;
140 designElements[index2].scaley=_scaleY;
141 designElements[index2].scalex=_scaleX;
142 design.AddElement(&designElements[index2]);
143 }
145 designElements[_index+0].start=0.0+_offset;
146 designElements[_index+1].start=0.58+_offset;
147 designElements[_index+2].start=1.10+_offset;
148 }
154 #ifndef NO_LOADER
156 void efxScreen0_t::DrawLoader()
157 {
158 const float BarHeight=64;
159 const float BarSpace=-16;
160 const float BarWidth=128;
161 const float MaxBar=mth::Floor(RX/(BarWidth+BarSpace));
162 const float MaxBarWidth=MaxBar*(BarWidth+BarSpace)-BarSpace;
163 const float BarStartY=200;
164 const float StartXCentered=(RX-MaxBarWidth)*0.5;
166 cmnPushMatrix();
167 cmnSetPlanarView();
168 loadingLevel=1.0;
169 int nbElements=mth::Min(loadingLevel*MaxBar,MaxBar);
171 glColor3f(1,1,1);
172 glEnable(GL_BLEND);
173 glBlendFunc(GL_ONE,GL_ONE);
174 for (int i=0;i<nbElements;i++) {
175 if (i==0)
176 txtBindTexture2d(textureStart,0);
177 else if (i==MaxBar-1)
178 txtBindTexture2d(textureEnd,0);
179 else
180 txtBindTexture2d(textureCurrent,0);
182 glBegin(GL_QUADS);
183 glTexCoord2f(0,0);
184 glVertex2f(StartXCentered+i*(BarWidth+BarSpace),BarStartY);
186 glTexCoord2f(0,1);
187 glVertex2f(StartXCentered+i*(BarWidth+BarSpace),BarStartY+BarHeight);
189 glTexCoord2f(1,1);
190 glVertex2f(StartXCentered+i*(BarWidth+BarSpace)+BarWidth,BarStartY+BarHeight);
192 glTexCoord2f(1,0);
193 glVertex2f(StartXCentered+i*(BarWidth+BarSpace)+BarWidth,BarStartY);
194 glEnd();
195 txtUnBindTexture2d(0);
196 }
198 cmnPopMatrix();
199 }
200 #endif
204 void efxScreen0_t::Draw()
205 {
206 cmnSetFrustrum(90);
207 cmnSetCamera( mth::Vector3_t( 0, 0, 100 ), mth::Vector3_t( 0 , 0, 0 ) );
209 //cmnDisplayBackground(backgroundTexture1,167,92,5,255,1);
210 //cmnDisplayBackground(backgroundTexture2,167,92,5,255,2);
212 glDisable(GL_DEPTH_TEST);
213 glDisable(GL_CULL_FACE);
214 glEnable(GL_BLEND);
216 glBlendFunc(GL_ONE,GL_ONE);
217 glColor4f(1,1,1,1);
218 cmnDisplayBackground(backgroundTexture1,10,12,90,50,1);
219 cmnDisplayBackground(backgroundTexture2,10,18,70,200,1);
221 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
223 design.Draw();
225 #ifndef NO_LOADER
226 DrawLoader();
227 #endif
229 }