Project

General

Profile

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

examples / src / main / java / org / distorted / examples / starwars / StarWarsRenderer.java @ fe59d375

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