Project

General

Profile

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

examples / src / main / java / org / distorted / examples / starwars / StarWarsRenderer.java @ 3f5b2cb3

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 3f5b2cb3 leszek
  private final int NUM_STARS = 0;
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
    mView = v;
122 e8b6aa95 Leszek Koltunski
123 b01acdaf Leszek Koltunski
    mQuad = new MeshFlat(1,1);
124 f6d884d5 Leszek Koltunski
125 d04a4886 Leszek Koltunski
    mScreenEffects          = new DistortedEffects();
126
    mGFFAEffects            = new DistortedEffects();
127
    mLogoEffects            = new DistortedEffects();
128
    mCrawlEffects           = new DistortedEffects();
129
    mCrawlBackgroundEffects = new DistortedEffects();
130 f6d884d5 Leszek Koltunski
131 3f5b2cb3 leszek
    if( NUM_STARS>0 )
132
      {
133
      mStarEffects = new DistortedEffects[NUM_STARS];
134
      mStarEffects[0] = new DistortedEffects();
135 f6d884d5 Leszek Koltunski
136 3f5b2cb3 leszek
      for (int i = 1; i < NUM_STARS; i++)
137
        mStarEffects[i] = new DistortedEffects(mStarEffects[0], Distorted.CLONE_VERTEX);
138
      }
139 f6d884d5 Leszek Koltunski
140 d218d64e leszek
    mScreen = new DistortedScreen();
141 392e16fd Leszek Koltunski
    mScreen.setProjection(60.0f, 0.0f, 0.0f);
142 bc0a685b Leszek Koltunski
    }
143 427ab7bf Leszek Koltunski
144 c4f5a8db Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
145
146
  public void onPause()
147
    {
148
    mWidth = 0;
149
    mHeight= 0;
150
    }
151
152 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
153
   
154 bc0a685b Leszek Koltunski
  public void onDrawFrame(GL10 glUnused) 
155
    {
156 41a81a14 Leszek Koltunski
    GLES30.glClear( GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
157 fe59d375 Leszek Koltunski
    mScreen.render(System.currentTimeMillis());
158 bc0a685b Leszek Koltunski
    }
159 427ab7bf Leszek Koltunski
160
///////////////////////////////////////////////////////////////////////////////////////////////////
161
    
162 bc0a685b Leszek Koltunski
  public void onSurfaceChanged(GL10 glUnused, int width, int height) 
163 b4cc083b Leszek Koltunski
    {
164 c4f5a8db Leszek Koltunski
    if( mWidth!=width || mHeight!=height )  // after onPause() we get 2 calls here
165
      {
166
      mWidth = width;
167
      mHeight= height;
168 b4cc083b Leszek Koltunski
169 392e16fd Leszek Koltunski
      mScreenEffects.abortAllEffects();
170
      mGFFAEffects.abortAllEffects();
171
      mLogoEffects.abortAllEffects();
172
      mCrawlEffects.abortAllEffects();
173
      mCrawlBackgroundEffects.abortAllEffects();
174 b4cc083b Leszek Koltunski
175 d04a4886 Leszek Koltunski
      for(int i=0; i<NUM_STARS; i++) mStarEffects[i].abortAllEffects();
176 b4cc083b Leszek Koltunski
177 c4f5a8db Leszek Koltunski
      setupScreen(width,height);
178
179 fe59d375 Leszek Koltunski
      mScreen.detachAll();
180
      mScreen.attach(mRoot);
181 392e16fd Leszek Koltunski
      mScreen.resize(width, height);
182 c4f5a8db Leszek Koltunski
      }
183 bc0a685b Leszek Koltunski
    }
184 427ab7bf Leszek Koltunski
185
///////////////////////////////////////////////////////////////////////////////////////////////////
186
    
187 bc0a685b Leszek Koltunski
  public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
188
    {
189 41a81a14 Leszek Koltunski
    GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
190 e7a4ef16 Leszek Koltunski
191 bc0a685b Leszek Koltunski
    setupBitmaps();
192 b4cc083b Leszek Koltunski
193 bc0a685b Leszek Koltunski
    try
194
      {
195 76f9798b Leszek Koltunski
      Distorted.onCreate(mView.getContext());
196 bc0a685b Leszek Koltunski
      }
197
    catch(Exception ex)
198
      {
199
      android.util.Log.e("Star Wars", ex.getMessage() );
200 427ab7bf Leszek Koltunski
      }
201 bc0a685b Leszek Koltunski
    }
202 427ab7bf Leszek Koltunski
    
203
///////////////////////////////////////////////////////////////////////////////////////////////////
204
205 bc0a685b Leszek Koltunski
  private void setupScreen(int w, int h)
206
    {
207 7451c98a Leszek Koltunski
    mScreenTexture = new DistortedTexture(w,h);
208 8744aa41 Leszek Koltunski
    mRoot = new DistortedNode(mScreenTexture, mScreenEffects,mQuad);
209 427ab7bf Leszek Koltunski
      
210 7451c98a Leszek Koltunski
    mCrawlBackgroundTexture = new DistortedTexture(w,(int)(Math.sqrt(3.0)*h));
211 427ab7bf Leszek Koltunski
       
212 bc0a685b Leszek Koltunski
    int randomA, randomX, randomY, randomTime;
213
    float randomS, randomAlpha1, randomAlpha2;
214 427ab7bf Leszek Koltunski
       
215 7589635e Leszek Koltunski
    Static3D center = new Static3D(0,0,0);
216
    Static3D axis   = new Static3D(0,0,1);
217 9ff0c8c3 Leszek Koltunski
    Static1D alphaNoise = new Static1D(0.4f);
218
219 bc0a685b Leszek Koltunski
    for(int i=0; i<NUM_STARS; i++)
220
      {
221
      randomX = mRnd.nextInt(w);
222
      randomY = mRnd.nextInt(h);
223 f6d884d5 Leszek Koltunski
      randomS = 0.2f+ 0.8f*mRnd.nextFloat();
224 bc0a685b Leszek Koltunski
      randomA = (int)(180*mRnd.nextFloat());
225
      randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
226
      randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
227
      randomTime = 500+mRnd.nextInt(2000);
228 427ab7bf Leszek Koltunski
      
229 d04a4886 Leszek Koltunski
      mStarEffects[i].move( new Static3D(randomX,randomY,0) );
230
      mStarEffects[i].scale(randomS);
231
      mStarEffects[i].rotate( new Static1D(randomA), axis, center );
232 427ab7bf Leszek Koltunski
      
233 f988589e Leszek Koltunski
      Dynamic1D di = new Dynamic1D(randomTime,0.0f);
234 9ff0c8c3 Leszek Koltunski
      di.setNoise(alphaNoise);
235 7589635e Leszek Koltunski
      di.add(new Static1D(randomAlpha1));
236
      di.add(new Static1D(randomAlpha2));
237 427ab7bf Leszek Koltunski
      
238 d04a4886 Leszek Koltunski
      mStarEffects[i].alpha(di);
239 427ab7bf Leszek Koltunski
      
240 d04a4886 Leszek Koltunski
      mRoot.attach(mStarTexture, mStarEffects[i], mQuad);
241 427ab7bf Leszek Koltunski
      }
242 bc0a685b Leszek Koltunski
      
243 f6d884d5 Leszek Koltunski
    float scale = (0.5f*w/mGFFATexture.getWidth());
244 bc0a685b Leszek Koltunski
    
245 f988589e Leszek Koltunski
    Dynamic1D di = new Dynamic1D(6000,0.5f);
246 7589635e Leszek Koltunski
    di.add(new Static1D(1.0f));
247
    di.add(new Static1D(1.0f));
248
    di.add(new Static1D(0.0f));
249 bc0a685b Leszek Koltunski
    
250 392e16fd Leszek Koltunski
    mGFFAEffects.move( new Static3D(w/5,h/3,0) );
251
    mGFFAEffects.scale( new Static3D(scale,scale,scale) );
252
    mGFFAEffects.alpha(di);
253 bc0a685b Leszek Koltunski
      
254 392e16fd Leszek Koltunski
    mRoot.attach(mGFFATexture, mGFFAEffects, mQuad);
255
    mGFFAEffects.registerForMessages(this);
256 bc0a685b Leszek Koltunski
    }
257 427ab7bf Leszek Koltunski
    
258
///////////////////////////////////////////////////////////////////////////////////////////////////
259
260 bc0a685b Leszek Koltunski
  private void setupBitmaps()
261
    {
262
    InputStream is1 = mView.getContext().getResources().openRawResource(R.raw.starwars);
263
    InputStream is2 = mView.getContext().getResources().openRawResource(R.raw.star);
264 427ab7bf Leszek Koltunski
    
265 bc0a685b Leszek Koltunski
    Bitmap bitmapStar, bitmapGFFA, bitmapLogo, bitmapText;
266
      
267
    try 
268
      {
269
      bitmapLogo = BitmapFactory.decodeStream(is1);
270
      bitmapStar = BitmapFactory.decodeStream(is2);
271
      } 
272
    finally 
273
      {
274 427ab7bf Leszek Koltunski
      try 
275
        {
276 bc0a685b Leszek Koltunski
        is1.close();
277
        is2.close();
278 427ab7bf Leszek Koltunski
        } 
279 bc0a685b Leszek Koltunski
      catch(IOException e) { }
280
      } 
281 427ab7bf Leszek Koltunski
      
282 bc0a685b Leszek Koltunski
    Paint paint = new Paint();
283
    paint.setAntiAlias(true);
284
    paint.setTextAlign(Paint.Align.LEFT);
285
    paint.setTextSize(FONT_HEIGHT);
286
    paint.setColor(GFFA_COLOR);
287 427ab7bf Leszek Koltunski
      
288 bc0a685b Leszek Koltunski
    Typeface tf = Typeface.create(CRAWL_TYPEFACE, Typeface.BOLD);
289
    paint.setTypeface(tf);     
290 427ab7bf Leszek Koltunski
 
291 bc0a685b Leszek Koltunski
    ///// create GFFA ///////////////////
292 7451c98a Leszek Koltunski
    mGFFATexture  = new DistortedTexture(GFFA_WIDTH,GFFA_HEIGHT);
293 bc0a685b Leszek Koltunski
    bitmapGFFA = Bitmap.createBitmap(GFFA_WIDTH,GFFA_HEIGHT,Bitmap.Config.ARGB_8888);
294
    bitmapGFFA.eraseColor(0x00000000);
295
    Canvas gffaCanvas = new Canvas(bitmapGFFA);
296 427ab7bf Leszek Koltunski
      
297 bc0a685b Leszek Koltunski
    for(int i=0; i<mGFFAString.length; i++)
298
      {
299
      gffaCanvas.drawText(mGFFAString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), paint);  
300
      }
301 427ab7bf Leszek Koltunski
  
302 f6d884d5 Leszek Koltunski
    mGFFATexture.setTexture(bitmapGFFA);
303 427ab7bf Leszek Koltunski
      
304 bc0a685b Leszek Koltunski
    ///// create Logo ///////////////////
305 7451c98a Leszek Koltunski
    mLogoTexture  = new DistortedTexture(bitmapLogo.getWidth(),bitmapLogo.getHeight());
306 f6d884d5 Leszek Koltunski
    mLogoTexture.setTexture(bitmapLogo);
307 e8b6aa95 Leszek Koltunski
308 bc0a685b Leszek Koltunski
    ///// create CRAWL //////////////////
309 7451c98a Leszek Koltunski
    mCrawlTexture = new DistortedTexture(CRAWL_WIDTH,CRAWL_HEIGHT);
310 bc0a685b Leszek Koltunski
    bitmapText = Bitmap.createBitmap(CRAWL_WIDTH,CRAWL_HEIGHT,Bitmap.Config.ARGB_8888);
311
    bitmapText.eraseColor(0x00000000);
312
    Canvas textCanvas = new Canvas(bitmapText);
313
    paint.setColor(CRAWL_COLOR);
314 427ab7bf Leszek Koltunski
  
315 bc0a685b Leszek Koltunski
    for(int i=0; i<mCRAWLString.length; i++)
316
      {
317
      displayJustified(mCRAWLString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), CRAWL_WIDTH, textCanvas, paint);  
318
      }
319 427ab7bf Leszek Koltunski
      
320 f6d884d5 Leszek Koltunski
    mCrawlTexture.setTexture(bitmapText);
321 427ab7bf Leszek Koltunski
      
322 bc0a685b Leszek Koltunski
    ///// create Stars ///////////////////
323 7451c98a Leszek Koltunski
    mStarTexture = new DistortedTexture(bitmapStar.getWidth(),bitmapStar.getHeight());
324 f6d884d5 Leszek Koltunski
    mStarTexture.setTexture(bitmapStar);
325 e8b6aa95 Leszek Koltunski
326 392e16fd Leszek Koltunski
    gffaID = mGFFAEffects.getID();
327
    logoID = mLogoEffects.getID();
328
    crawlID= mCrawlEffects.getID();
329 bc0a685b Leszek Koltunski
    }
330 427ab7bf Leszek Koltunski
 
331
///////////////////////////////////////////////////////////////////////////////////////////////////
332
333 bc0a685b Leszek Koltunski
  private void displayJustified(String str, int x, int y, int length, Canvas c, Paint paint)
334
    { 
335
    int len       = str.length();
336
    int numspaces = retNumSpaces(str);
337 427ab7bf Leszek Koltunski
    
338 bc0a685b Leszek Koltunski
    if( len>0 && str.charAt(len-1) == ' ' ) numspaces--;
339 427ab7bf Leszek Koltunski
340 bc0a685b Leszek Koltunski
    float left=x,w = (numspaces>0 ? (length-paint.measureText(str))/numspaces : 0);
341
    String tmp;
342
    int begin,end=0;
343 427ab7bf Leszek Koltunski
344 bc0a685b Leszek Koltunski
    while( end<len )
345
      {
346
      begin=end;
347
      end = str.indexOf(' ', begin)+1;
348
      if( end<=0 ) end = len;
349 427ab7bf Leszek Koltunski
350 bc0a685b Leszek Koltunski
      tmp = str.substring(begin,end);
351
      c.drawText( tmp, left, y, paint);
352
      left+= (paint.measureText(tmp)+w);
353
      }  
354
    }
355 427ab7bf Leszek Koltunski
356
///////////////////////////////////////////////////////////////////////////////////////////////////
357
   
358 bc0a685b Leszek Koltunski
  private int retNumSpaces(String str)
359
    {
360
    int begin=0, ret=0;
361 427ab7bf Leszek Koltunski
362 bc0a685b Leszek Koltunski
    while( true )
363
      {
364
      begin = str.indexOf(' ', begin) +1;
365 427ab7bf Leszek Koltunski
366 bc0a685b Leszek Koltunski
      if( begin>0 ) ret++;
367
      else break;
368 427ab7bf Leszek Koltunski
      }
369 bc0a685b Leszek Koltunski
370
    return ret;
371
    }
372 427ab7bf Leszek Koltunski
    
373
///////////////////////////////////////////////////////////////////////////////////////////////////
374 c5a28eb8 Leszek Koltunski
// the library sending messages to us. This is running on a library 'MessageSender' thread.
375 427ab7bf Leszek Koltunski
376 9d12dd4a Leszek Koltunski
  public void effectMessage(final EffectMessage em, final long effectID, final EffectNames effectName, final long objectID)
377 bc0a685b Leszek Koltunski
    {
378
    if( em==EffectMessage.EFFECT_FINISHED )
379 427ab7bf Leszek Koltunski
      {
380 c5a28eb8 Leszek Koltunski
      if( objectID == gffaID )
381 427ab7bf Leszek Koltunski
        {
382 392e16fd Leszek Koltunski
        mRoot.detach(mGFFAEffects);
383
        mGFFAEffects.abortAllEffects();
384 3c8b1903 Leszek Koltunski
        mGFFATexture.markForDeletion();
385 611ea379 Leszek Koltunski
386 f6d884d5 Leszek Koltunski
        int screenW=mScreenTexture.getWidth();
387
        int screenH=mScreenTexture.getHeight();
388 427ab7bf Leszek Koltunski
        
389 f6d884d5 Leszek Koltunski
        int logoW = mLogoTexture.getWidth();
390
        int logoH = mLogoTexture.getHeight();
391 427ab7bf Leszek Koltunski
      
392 bc0a685b Leszek Koltunski
        int initSize= (int)(3.0f*screenW/logoW);
393
        int finaSize= (int)(0.1f*screenW/logoW);
394 427ab7bf Leszek Koltunski
      
395 f988589e Leszek Koltunski
        Dynamic3D di = new Dynamic3D(10000,0.5f);
396 7589635e Leszek Koltunski
        di.add(new Static3D(initSize,initSize,1));
397
        di.add(new Static3D(finaSize,finaSize,1));
398 f988589e Leszek Koltunski
399 392e16fd Leszek Koltunski
        mLogoEffects.move( new Static3D(screenW/2,screenH/2,0) );
400
        mLogoEffects.scale(di);
401
        mLogoEffects.move( new Static3D(-logoW/2,-logoH/2,0) );
402 427ab7bf Leszek Koltunski
      
403 392e16fd Leszek Koltunski
        mRoot.attach(mLogoTexture, mLogoEffects,mQuad);
404
        mLogoEffects.registerForMessages(this);
405 bc0a685b Leszek Koltunski
        }
406 c5a28eb8 Leszek Koltunski
      else if( objectID==logoID )
407 bc0a685b Leszek Koltunski
        {
408 392e16fd Leszek Koltunski
        mRoot.detach(mLogoEffects);
409
        mLogoEffects.abortAllEffects();
410 3c8b1903 Leszek Koltunski
        mLogoTexture.markForDeletion();
411 427ab7bf Leszek Koltunski
        
412 f6d884d5 Leszek Koltunski
        int crawlW = mCrawlTexture.getWidth();
413
        int crawlH = mCrawlTexture.getHeight();
414
        int screenW= mScreenTexture.getWidth();
415
        int screenH= mScreenTexture.getHeight();
416
        int backH  = mCrawlBackgroundTexture.getHeight();
417 bc0a685b Leszek Koltunski
        float scale= (float)screenW/crawlW;
418
      
419 f988589e Leszek Koltunski
        Dynamic3D di = new Dynamic3D(60000,0.5f);
420 7589635e Leszek Koltunski
        di.add(new Static3D(screenW/2,+backH       , 0));
421
        di.add(new Static3D(screenW/2,-scale*crawlH, 0));
422 427ab7bf Leszek Koltunski
        
423 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.move( new Static3D(0,screenH-backH,0) );
424
        mCrawlBackgroundEffects.rotate( new Static1D(CRAWL_ANGLE), new Static3D(1,0,0), new Static3D(screenW/2,backH,0) );
425 427ab7bf Leszek Koltunski
        
426 59759251 Leszek Koltunski
        final int transpDist = 5;
427
        Static4D region = new Static4D(screenW/2,(1-transpDist)*backH,transpDist*backH,transpDist*backH);
428 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.alpha(new Static1D(1-transpDist/2), region, true);
429 427ab7bf Leszek Koltunski
        
430 392e16fd Leszek Koltunski
        mCrawlEffects.move(di);
431
        mCrawlEffects.scale( new Static3D(scale,scale,scale) );
432
        mCrawlEffects.move( new Static3D(-crawlW/2,0,0) );
433 427ab7bf Leszek Koltunski
        
434 392e16fd Leszek Koltunski
        mBackground = mRoot.attach(mCrawlBackgroundTexture, mCrawlBackgroundEffects,mQuad);
435
        mBackground.attach(mCrawlTexture, mCrawlEffects,mQuad);
436
        mCrawlEffects.registerForMessages(this);
437 bc0a685b Leszek Koltunski
        }
438 c5a28eb8 Leszek Koltunski
      else if( objectID==crawlID )
439 bc0a685b Leszek Koltunski
        {
440
        mRoot.detach(mBackground);
441 392e16fd Leszek Koltunski
        mBackground.detach(mCrawlEffects);
442
        mCrawlEffects.abortAllEffects();
443 3c8b1903 Leszek Koltunski
        mCrawlTexture.markForDeletion();
444 392e16fd Leszek Koltunski
        mCrawlBackgroundEffects.abortAllEffects();
445 3c8b1903 Leszek Koltunski
        mCrawlBackgroundTexture.markForDeletion();
446 427ab7bf Leszek Koltunski
        }
447
      }
448 bc0a685b Leszek Koltunski
    }
449
  }