Project

General

Profile

Download (16.2 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / starwars / StarWarsRenderer.java @ 76f2d645

1 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19 427ab7bf Leszek Koltunski
20 5068fa06 Leszek Koltunski
package org.distorted.examples.starwars;
21 427ab7bf Leszek Koltunski
22
import java.io.IOException;
23
import java.io.InputStream;
24
import java.util.Random;
25
26
import javax.microedition.khronos.egl.EGLConfig;
27
import javax.microedition.khronos.opengles.GL10;
28
29 5068fa06 Leszek Koltunski
import org.distorted.examples.R;
30
31 8744aa41 Leszek Koltunski
import org.distorted.library.DistortedNode;
32 d218d64e leszek
import org.distorted.library.DistortedScreen;
33 b01acdaf Leszek Koltunski
import org.distorted.library.MeshFlat;
34 c5a28eb8 Leszek Koltunski
import org.distorted.library.EffectNames;
35 7589635e Leszek Koltunski
import org.distorted.library.type.Dynamic1D;
36
import org.distorted.library.type.Dynamic3D;
37
import org.distorted.library.type.Static1D;
38
import org.distorted.library.type.Static3D;
39
import org.distorted.library.type.Static4D;
40 13efa930 Leszek Koltunski
import org.distorted.library.message.EffectListener;
41
import org.distorted.library.message.EffectMessage;
42 5068fa06 Leszek Koltunski
import org.distorted.library.Distorted;
43 f6d884d5 Leszek Koltunski
import org.distorted.library.DistortedTexture;
44 d04a4886 Leszek Koltunski
import org.distorted.library.DistortedEffects;
45 427ab7bf Leszek Koltunski
46
import android.graphics.Bitmap;
47
import android.graphics.BitmapFactory;
48
import android.graphics.Canvas;
49
import android.graphics.Paint;
50
import android.graphics.Typeface;
51 41a81a14 Leszek Koltunski
import android.opengl.GLES30;
52 427ab7bf Leszek Koltunski
import android.opengl.GLSurfaceView;
53
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
56
class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
57 bc0a685b Leszek Koltunski
  {
58
  private final String[] mGFFAString = 
59 427ab7bf Leszek Koltunski
         
60
            { "A long time ago, in a galaxy far,",
61
              "far away...." };                    // yes, there really was a four-dot ellipsis
62
63 bc0a685b Leszek Koltunski
  private final String[] mCRAWLString = 
64 427ab7bf Leszek Koltunski
      
65
            { "It is a period of civil war.",      // in the original 1977 version, there was no 
66
              "Rebel spaceships, striking",        // 'Episode IV New Hope' subtitle line before
67
              "from a hidden base, have",          // the crawl. Lets keep to the classic.
68
              "won their first victory",
69
              "against the evil Galactic",
70
              "Empire.",
71
              "",
72
              "During the battle, rebel",
73
              "spies managed to steal",
74
              "secret plans to the Empire's",
75
              "ultimate weapon, the",
76
              "DEATH STAR, an armored",
77
              "space station with enough",
78
              "power to destroy an entire",
79
              "planet.",
80
              "",
81
              "Pursued by the Empire's",
82
              "sinister agents, Princess",
83
              "Leia races home aboard her",
84
              "starship, custodian of the",
85
              "stolen plans that can save",
86
              "her people and restore",
87
              "freedom to the galaxy...." };      // four-dot.
88
   
89 76f2d645 leszek
  private final int NUM_STARS = 40;
90 427ab7bf Leszek Koltunski
   
91 bc0a685b Leszek Koltunski
  private final int CRAWL_COLOR = 0xffffe81f;
92
  private final int GFFA_COLOR  = 0xff0000ff;
93
  private final int FONT_HEIGHT      = 40;
94
  private final int VERTICAL_SPACING = 10;
95
  private final String CRAWL_TYPEFACE = "News Gothic";
96 427ab7bf Leszek Koltunski
   
97 bc0a685b Leszek Koltunski
  private final int CRAWL_WIDTH = 500;
98
  private final int CRAWL_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mCRAWLString.length+1);
99 427ab7bf Leszek Koltunski
   
100 bc0a685b Leszek Koltunski
  private final int GFFA_WIDTH = 600;
101
  private final int GFFA_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mGFFAString.length+1);
102 427ab7bf Leszek Koltunski
   
103 bc0a685b Leszek Koltunski
  private final float CRAWL_ANGLE = -30.0f;
104 427ab7bf Leszek Koltunski
   
105 bc0a685b Leszek Koltunski
  private GLSurfaceView mView;
106 f6d884d5 Leszek Koltunski
  private DistortedTexture mScreenTexture, mGFFATexture, mLogoTexture, mCrawlTexture, mCrawlBackgroundTexture, mStarTexture;
107 d04a4886 Leszek Koltunski
  private DistortedEffects mScreenEffects, mGFFAEffects, mLogoEffects, mCrawlEffects, mCrawlBackgroundEffects;
108
  private DistortedEffects[] mStarEffects;
109 8744aa41 Leszek Koltunski
  private DistortedNode mRoot, mBackground;
110 d218d64e leszek
  private DistortedScreen mScreen;
111 b01acdaf Leszek Koltunski
  private MeshFlat mQuad;
112 392e16fd Leszek Koltunski
113
  private long gffaID, logoID, crawlID;
114
  private Random mRnd = new Random(0);
115 c4f5a8db Leszek Koltunski
  private int mWidth, mHeight;
116 e8b6aa95 Leszek Koltunski
117 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
118
119 e7a4ef16 Leszek Koltunski
  StarWarsRenderer(GLSurfaceView v)
120 bc0a685b Leszek Koltunski
    {
121 76f2d645 leszek
    android.util.Log.d("STAR WARS", "constructor");
122
123 bc0a685b Leszek Koltunski
    mView = v;
124 e8b6aa95 Leszek Koltunski
125 b01acdaf Leszek Koltunski
    mQuad = new MeshFlat(1,1);
126 f6d884d5 Leszek Koltunski
127 d04a4886 Leszek Koltunski
    mScreenEffects          = new DistortedEffects();
128
    mGFFAEffects            = new DistortedEffects();
129
    mLogoEffects            = new DistortedEffects();
130
    mCrawlEffects           = new DistortedEffects();
131
    mCrawlBackgroundEffects = new DistortedEffects();
132 f6d884d5 Leszek Koltunski
133 3f5b2cb3 leszek
    if( NUM_STARS>0 )
134
      {
135
      mStarEffects = new DistortedEffects[NUM_STARS];
136
      mStarEffects[0] = new DistortedEffects();
137 f6d884d5 Leszek Koltunski
138 3f5b2cb3 leszek
      for (int i = 1; i < NUM_STARS; i++)
139
        mStarEffects[i] = new DistortedEffects(mStarEffects[0], Distorted.CLONE_VERTEX);
140
      }
141 f6d884d5 Leszek Koltunski
142 d218d64e leszek
    mScreen = new DistortedScreen();
143 392e16fd Leszek Koltunski
    mScreen.setProjection(60.0f, 0.0f, 0.0f);
144 bc0a685b Leszek Koltunski
    }
145 427ab7bf Leszek Koltunski
146 c4f5a8db Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
147
148
  public void onPause()
149
    {
150 76f2d645 leszek
    android.util.Log.d("STAR WARS", "onPause");
151
152 c4f5a8db Leszek Koltunski
    mWidth = 0;
153
    mHeight= 0;
154
    }
155
156 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
157
   
158 bc0a685b Leszek Koltunski
  public void onDrawFrame(GL10 glUnused) 
159
    {
160 41a81a14 Leszek Koltunski
    GLES30.glClear( GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
161 fe59d375 Leszek Koltunski
    mScreen.render(System.currentTimeMillis());
162 bc0a685b Leszek Koltunski
    }
163 427ab7bf Leszek Koltunski
164
///////////////////////////////////////////////////////////////////////////////////////////////////
165
    
166 bc0a685b Leszek Koltunski
  public void onSurfaceChanged(GL10 glUnused, int width, int height) 
167 b4cc083b Leszek Koltunski
    {
168 76f2d645 leszek
    android.util.Log.d("STAR WARS", "surfaceChanged");
169
170
171 c4f5a8db Leszek Koltunski
    if( mWidth!=width || mHeight!=height )  // after onPause() we get 2 calls here
172
      {
173
      mWidth = width;
174
      mHeight= height;
175 b4cc083b Leszek Koltunski
176 392e16fd Leszek Koltunski
      mScreenEffects.abortAllEffects();
177
      mGFFAEffects.abortAllEffects();
178
      mLogoEffects.abortAllEffects();
179
      mCrawlEffects.abortAllEffects();
180
      mCrawlBackgroundEffects.abortAllEffects();
181 b4cc083b Leszek Koltunski
182 d04a4886 Leszek Koltunski
      for(int i=0; i<NUM_STARS; i++) mStarEffects[i].abortAllEffects();
183 b4cc083b Leszek Koltunski
184 c4f5a8db Leszek Koltunski
      setupScreen(width,height);
185
186 fe59d375 Leszek Koltunski
      mScreen.detachAll();
187
      mScreen.attach(mRoot);
188 392e16fd Leszek Koltunski
      mScreen.resize(width, height);
189 c4f5a8db Leszek Koltunski
      }
190 bc0a685b Leszek Koltunski
    }
191 427ab7bf Leszek Koltunski
192
///////////////////////////////////////////////////////////////////////////////////////////////////
193
    
194 bc0a685b Leszek Koltunski
  public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
195
    {
196 76f2d645 leszek
    android.util.Log.d("STAR WARS", "surfaceCreated");
197
198 41a81a14 Leszek Koltunski
    GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
199 e7a4ef16 Leszek Koltunski
200 bc0a685b Leszek Koltunski
    setupBitmaps();
201 b4cc083b Leszek Koltunski
202 bc0a685b Leszek Koltunski
    try
203
      {
204 76f9798b Leszek Koltunski
      Distorted.onCreate(mView.getContext());
205 bc0a685b Leszek Koltunski
      }
206
    catch(Exception ex)
207
      {
208
      android.util.Log.e("Star Wars", ex.getMessage() );
209 427ab7bf Leszek Koltunski
      }
210 bc0a685b Leszek Koltunski
    }
211 427ab7bf Leszek Koltunski
    
212
///////////////////////////////////////////////////////////////////////////////////////////////////
213
214 bc0a685b Leszek Koltunski
  private void setupScreen(int w, int h)
215
    {
216 7451c98a Leszek Koltunski
    mScreenTexture = new DistortedTexture(w,h);
217 8744aa41 Leszek Koltunski
    mRoot = new DistortedNode(mScreenTexture, mScreenEffects,mQuad);
218 76f2d645 leszek
219 7451c98a Leszek Koltunski
    mCrawlBackgroundTexture = new DistortedTexture(w,(int)(Math.sqrt(3.0)*h));
220 427ab7bf Leszek Koltunski
       
221 bc0a685b Leszek Koltunski
    int randomA, randomX, randomY, randomTime;
222
    float randomS, randomAlpha1, randomAlpha2;
223 427ab7bf Leszek Koltunski
       
224 7589635e Leszek Koltunski
    Static3D center = new Static3D(0,0,0);
225
    Static3D axis   = new Static3D(0,0,1);
226 9ff0c8c3 Leszek Koltunski
    Static1D alphaNoise = new Static1D(0.4f);
227
228 bc0a685b Leszek Koltunski
    for(int i=0; i<NUM_STARS; i++)
229
      {
230
      randomX = mRnd.nextInt(w);
231
      randomY = mRnd.nextInt(h);
232 f6d884d5 Leszek Koltunski
      randomS = 0.2f+ 0.8f*mRnd.nextFloat();
233 bc0a685b Leszek Koltunski
      randomA = (int)(180*mRnd.nextFloat());
234
      randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
235
      randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
236
      randomTime = 500+mRnd.nextInt(2000);
237 427ab7bf Leszek Koltunski
      
238 d04a4886 Leszek Koltunski
      mStarEffects[i].move( new Static3D(randomX,randomY,0) );
239
      mStarEffects[i].scale(randomS);
240
      mStarEffects[i].rotate( new Static1D(randomA), axis, center );
241 427ab7bf Leszek Koltunski
      
242 f988589e Leszek Koltunski
      Dynamic1D di = new Dynamic1D(randomTime,0.0f);
243 9ff0c8c3 Leszek Koltunski
      di.setNoise(alphaNoise);
244 7589635e Leszek Koltunski
      di.add(new Static1D(randomAlpha1));
245
      di.add(new Static1D(randomAlpha2));
246 427ab7bf Leszek Koltunski
      
247 d04a4886 Leszek Koltunski
      mStarEffects[i].alpha(di);
248 427ab7bf Leszek Koltunski
      
249 d04a4886 Leszek Koltunski
      mRoot.attach(mStarTexture, mStarEffects[i], mQuad);
250 427ab7bf Leszek Koltunski
      }
251 bc0a685b Leszek Koltunski
      
252 f6d884d5 Leszek Koltunski
    float scale = (0.5f*w/mGFFATexture.getWidth());
253 bc0a685b Leszek Koltunski
    
254 f988589e Leszek Koltunski
    Dynamic1D di = new Dynamic1D(6000,0.5f);
255 7589635e Leszek Koltunski
    di.add(new Static1D(1.0f));
256
    di.add(new Static1D(1.0f));
257
    di.add(new Static1D(0.0f));
258 bc0a685b Leszek Koltunski
    
259 392e16fd Leszek Koltunski
    mGFFAEffects.move( new Static3D(w/5,h/3,0) );
260
    mGFFAEffects.scale( new Static3D(scale,scale,scale) );
261
    mGFFAEffects.alpha(di);
262 bc0a685b Leszek Koltunski
      
263 392e16fd Leszek Koltunski
    mRoot.attach(mGFFATexture, mGFFAEffects, mQuad);
264
    mGFFAEffects.registerForMessages(this);
265 bc0a685b Leszek Koltunski
    }
266 427ab7bf Leszek Koltunski
    
267
///////////////////////////////////////////////////////////////////////////////////////////////////
268
269 bc0a685b Leszek Koltunski
  private void setupBitmaps()
270
    {
271
    InputStream is1 = mView.getContext().getResources().openRawResource(R.raw.starwars);
272
    InputStream is2 = mView.getContext().getResources().openRawResource(R.raw.star);
273 427ab7bf Leszek Koltunski
    
274 bc0a685b Leszek Koltunski
    Bitmap bitmapStar, bitmapGFFA, bitmapLogo, bitmapText;
275
      
276
    try 
277
      {
278
      bitmapLogo = BitmapFactory.decodeStream(is1);
279
      bitmapStar = BitmapFactory.decodeStream(is2);
280
      } 
281
    finally 
282
      {
283 427ab7bf Leszek Koltunski
      try 
284
        {
285 bc0a685b Leszek Koltunski
        is1.close();
286
        is2.close();
287 427ab7bf Leszek Koltunski
        } 
288 bc0a685b Leszek Koltunski
      catch(IOException e) { }
289
      } 
290 427ab7bf Leszek Koltunski
      
291 bc0a685b Leszek Koltunski
    Paint paint = new Paint();
292
    paint.setAntiAlias(true);
293
    paint.setTextAlign(Paint.Align.LEFT);
294
    paint.setTextSize(FONT_HEIGHT);
295
    paint.setColor(GFFA_COLOR);
296 427ab7bf Leszek Koltunski
      
297 bc0a685b Leszek Koltunski
    Typeface tf = Typeface.create(CRAWL_TYPEFACE, Typeface.BOLD);
298
    paint.setTypeface(tf);     
299 427ab7bf Leszek Koltunski
 
300 bc0a685b Leszek Koltunski
    ///// create GFFA ///////////////////
301 7451c98a Leszek Koltunski
    mGFFATexture  = new DistortedTexture(GFFA_WIDTH,GFFA_HEIGHT);
302 bc0a685b Leszek Koltunski
    bitmapGFFA = Bitmap.createBitmap(GFFA_WIDTH,GFFA_HEIGHT,Bitmap.Config.ARGB_8888);
303
    bitmapGFFA.eraseColor(0x00000000);
304
    Canvas gffaCanvas = new Canvas(bitmapGFFA);
305 427ab7bf Leszek Koltunski
      
306 bc0a685b Leszek Koltunski
    for(int i=0; i<mGFFAString.length; i++)
307
      {
308
      gffaCanvas.drawText(mGFFAString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), paint);  
309
      }
310 427ab7bf Leszek Koltunski
  
311 f6d884d5 Leszek Koltunski
    mGFFATexture.setTexture(bitmapGFFA);
312 427ab7bf Leszek Koltunski
      
313 bc0a685b Leszek Koltunski
    ///// create Logo ///////////////////
314 7451c98a Leszek Koltunski
    mLogoTexture  = new DistortedTexture(bitmapLogo.getWidth(),bitmapLogo.getHeight());
315 f6d884d5 Leszek Koltunski
    mLogoTexture.setTexture(bitmapLogo);
316 e8b6aa95 Leszek Koltunski
317 bc0a685b Leszek Koltunski
    ///// create CRAWL //////////////////
318 7451c98a Leszek Koltunski
    mCrawlTexture = new DistortedTexture(CRAWL_WIDTH,CRAWL_HEIGHT);
319 bc0a685b Leszek Koltunski
    bitmapText = Bitmap.createBitmap(CRAWL_WIDTH,CRAWL_HEIGHT,Bitmap.Config.ARGB_8888);
320
    bitmapText.eraseColor(0x00000000);
321
    Canvas textCanvas = new Canvas(bitmapText);
322
    paint.setColor(CRAWL_COLOR);
323 427ab7bf Leszek Koltunski
  
324 bc0a685b Leszek Koltunski
    for(int i=0; i<mCRAWLString.length; i++)
325
      {
326
      displayJustified(mCRAWLString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), CRAWL_WIDTH, textCanvas, paint);  
327
      }
328 427ab7bf Leszek Koltunski
      
329 f6d884d5 Leszek Koltunski
    mCrawlTexture.setTexture(bitmapText);
330 427ab7bf Leszek Koltunski
      
331 bc0a685b Leszek Koltunski
    ///// create Stars ///////////////////
332 7451c98a Leszek Koltunski
    mStarTexture = new DistortedTexture(bitmapStar.getWidth(),bitmapStar.getHeight());
333 f6d884d5 Leszek Koltunski
    mStarTexture.setTexture(bitmapStar);
334 e8b6aa95 Leszek Koltunski
335 392e16fd Leszek Koltunski
    gffaID = mGFFAEffects.getID();
336
    logoID = mLogoEffects.getID();
337
    crawlID= mCrawlEffects.getID();
338 bc0a685b Leszek Koltunski
    }
339 427ab7bf Leszek Koltunski
 
340
///////////////////////////////////////////////////////////////////////////////////////////////////
341
342 bc0a685b Leszek Koltunski
  private void displayJustified(String str, int x, int y, int length, Canvas c, Paint paint)
343
    { 
344
    int len       = str.length();
345
    int numspaces = retNumSpaces(str);
346 427ab7bf Leszek Koltunski
    
347 bc0a685b Leszek Koltunski
    if( len>0 && str.charAt(len-1) == ' ' ) numspaces--;
348 427ab7bf Leszek Koltunski
349 bc0a685b Leszek Koltunski
    float left=x,w = (numspaces>0 ? (length-paint.measureText(str))/numspaces : 0);
350
    String tmp;
351
    int begin,end=0;
352 427ab7bf Leszek Koltunski
353 bc0a685b Leszek Koltunski
    while( end<len )
354
      {
355
      begin=end;
356
      end = str.indexOf(' ', begin)+1;
357
      if( end<=0 ) end = len;
358 427ab7bf Leszek Koltunski
359 bc0a685b Leszek Koltunski
      tmp = str.substring(begin,end);
360
      c.drawText( tmp, left, y, paint);
361
      left+= (paint.measureText(tmp)+w);
362
      }  
363
    }
364 427ab7bf Leszek Koltunski
365
///////////////////////////////////////////////////////////////////////////////////////////////////
366
   
367 bc0a685b Leszek Koltunski
  private int retNumSpaces(String str)
368
    {
369
    int begin=0, ret=0;
370 427ab7bf Leszek Koltunski
371 bc0a685b Leszek Koltunski
    while( true )
372
      {
373
      begin = str.indexOf(' ', begin) +1;
374 427ab7bf Leszek Koltunski
375 bc0a685b Leszek Koltunski
      if( begin>0 ) ret++;
376
      else break;
377 427ab7bf Leszek Koltunski
      }
378 bc0a685b Leszek Koltunski
379
    return ret;
380
    }
381 427ab7bf Leszek Koltunski
    
382
///////////////////////////////////////////////////////////////////////////////////////////////////
383 c5a28eb8 Leszek Koltunski
// the library sending messages to us. This is running on a library 'MessageSender' thread.
384 427ab7bf Leszek Koltunski
385 9d12dd4a Leszek Koltunski
  public void effectMessage(final EffectMessage em, final long effectID, final EffectNames effectName, final long objectID)
386 bc0a685b Leszek Koltunski
    {
387
    if( em==EffectMessage.EFFECT_FINISHED )
388 427ab7bf Leszek Koltunski
      {
389 c5a28eb8 Leszek Koltunski
      if( objectID == gffaID )
390 427ab7bf Leszek Koltunski
        {
391 392e16fd Leszek Koltunski
        mRoot.detach(mGFFAEffects);
392
        mGFFAEffects.abortAllEffects();
393 3c8b1903 Leszek Koltunski
        mGFFATexture.markForDeletion();
394 611ea379 Leszek Koltunski
395 f6d884d5 Leszek Koltunski
        int screenW=mScreenTexture.getWidth();
396
        int screenH=mScreenTexture.getHeight();
397 427ab7bf Leszek Koltunski
        
398 f6d884d5 Leszek Koltunski
        int logoW = mLogoTexture.getWidth();
399
        int logoH = mLogoTexture.getHeight();
400 427ab7bf Leszek Koltunski
      
401 bc0a685b Leszek Koltunski
        int initSize= (int)(3.0f*screenW/logoW);
402
        int finaSize= (int)(0.1f*screenW/logoW);
403 427ab7bf Leszek Koltunski
      
404 f988589e Leszek Koltunski
        Dynamic3D di = new Dynamic3D(10000,0.5f);
405 7589635e Leszek Koltunski
        di.add(new Static3D(initSize,initSize,1));
406
        di.add(new Static3D(finaSize,finaSize,1));
407 f988589e Leszek Koltunski
408 392e16fd Leszek Koltunski
        mLogoEffects.move( new Static3D(screenW/2,screenH/2,0) );
409
        mLogoEffects.scale(di);
410
        mLogoEffects.move( new Static3D(-logoW/2,-logoH/2,0) );
411 427ab7bf Leszek Koltunski
      
412 392e16fd Leszek Koltunski
        mRoot.attach(mLogoTexture, mLogoEffects,mQuad);
413
        mLogoEffects.registerForMessages(this);
414 bc0a685b Leszek Koltunski
        }
415 c5a28eb8 Leszek Koltunski
      else if( objectID==logoID )
416 bc0a685b Leszek Koltunski
        {
417 392e16fd Leszek Koltunski
        mRoot.detach(mLogoEffects);
418
        mLogoEffects.abortAllEffects();
419 3c8b1903 Leszek Koltunski
        mLogoTexture.markForDeletion();
420 427ab7bf Leszek Koltunski
        
421 f6d884d5 Leszek Koltunski
        int crawlW = mCrawlTexture.getWidth();
422
        int crawlH = mCrawlTexture.getHeight();
423
        int screenW= mScreenTexture.getWidth();
424
        int screenH= mScreenTexture.getHeight();
425
        int backH  = mCrawlBackgroundTexture.getHeight();
426 bc0a685b Leszek Koltunski
        float scale= (float)screenW/crawlW;
427
      
428 f988589e Leszek Koltunski
        Dynamic3D di = new Dynamic3D(60000,0.5f);
429 7589635e Leszek Koltunski
        di.add(new Static3D(screenW/2,+backH       , 0));
430
        di.add(new Static3D(screenW/2,-scale*crawlH, 0));
431 427ab7bf Leszek Koltunski
        
432 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.move( new Static3D(0,screenH-backH,0) );
433
        mCrawlBackgroundEffects.rotate( new Static1D(CRAWL_ANGLE), new Static3D(1,0,0), new Static3D(screenW/2,backH,0) );
434 427ab7bf Leszek Koltunski
        
435 59759251 Leszek Koltunski
        final int transpDist = 5;
436
        Static4D region = new Static4D(screenW/2,(1-transpDist)*backH,transpDist*backH,transpDist*backH);
437 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.alpha(new Static1D(1-transpDist/2), region, true);
438 427ab7bf Leszek Koltunski
        
439 392e16fd Leszek Koltunski
        mCrawlEffects.move(di);
440
        mCrawlEffects.scale( new Static3D(scale,scale,scale) );
441
        mCrawlEffects.move( new Static3D(-crawlW/2,0,0) );
442 427ab7bf Leszek Koltunski
        
443 392e16fd Leszek Koltunski
        mBackground = mRoot.attach(mCrawlBackgroundTexture, mCrawlBackgroundEffects,mQuad);
444
        mBackground.attach(mCrawlTexture, mCrawlEffects,mQuad);
445
        mCrawlEffects.registerForMessages(this);
446 bc0a685b Leszek Koltunski
        }
447 c5a28eb8 Leszek Koltunski
      else if( objectID==crawlID )
448 bc0a685b Leszek Koltunski
        {
449
        mRoot.detach(mBackground);
450 392e16fd Leszek Koltunski
        mBackground.detach(mCrawlEffects);
451
        mCrawlEffects.abortAllEffects();
452 3c8b1903 Leszek Koltunski
        mCrawlTexture.markForDeletion();
453 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.abortAllEffects();
454 3c8b1903 Leszek Koltunski
        mCrawlBackgroundTexture.markForDeletion();
455 427ab7bf Leszek Koltunski
        }
456
      }
457 bc0a685b Leszek Koltunski
    }
458
  }