Project

General

Profile

« Previous | Next » 

Revision bc0a685b

Added by Leszek Koltunski almost 8 years ago

Add License

View differences:

src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
1
///////////////////////////////////////////////////////////////////////////////////////////////////
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
///////////////////////////////////////////////////////////////////////////////////////////////////
1 19

  
2 20
package org.distorted.examples.starwars;
3 21

  
......
33 51
///////////////////////////////////////////////////////////////////////////////////////////////////
34 52

  
35 53
class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
36
{
37
   private final String[] mGFFAString = 
54
  {
55
  private final String[] mGFFAString = 
38 56
         
39 57
            { "A long time ago, in a galaxy far,",
40 58
              "far away...." };                    // yes, there really was a four-dot ellipsis
41 59

  
42
   private final String[] mCRAWLString = 
60
  private final String[] mCRAWLString = 
43 61
      
44 62
            { "It is a period of civil war.",      // in the original 1977 version, there was no 
45 63
              "Rebel spaceships, striking",        // 'Episode IV New Hope' subtitle line before
......
65 83
              "her people and restore",
66 84
              "freedom to the galaxy...." };      // four-dot.
67 85
   
68
   private final int NUM_STARS = 40;
86
  private final int NUM_STARS = 40;
69 87
   
70
   private final int CRAWL_COLOR = 0xffffe81f;
71
   private final int GFFA_COLOR  = 0xff0000ff;
72
   private final int FONT_HEIGHT      = 40;
73
   private final int VERTICAL_SPACING = 10;
74
   private final String CRAWL_TYPEFACE = "News Gothic";
88
  private final int CRAWL_COLOR = 0xffffe81f;
89
  private final int GFFA_COLOR  = 0xff0000ff;
90
  private final int FONT_HEIGHT      = 40;
91
  private final int VERTICAL_SPACING = 10;
92
  private final String CRAWL_TYPEFACE = "News Gothic";
75 93
   
76
   private final int CRAWL_WIDTH = 500;
77
   private final int CRAWL_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mCRAWLString.length+1);
94
  private final int CRAWL_WIDTH = 500;
95
  private final int CRAWL_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mCRAWLString.length+1);
78 96
   
79
   private final int GFFA_WIDTH = 600;
80
   private final int GFFA_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mGFFAString.length+1);
97
  private final int GFFA_WIDTH = 600;
98
  private final int GFFA_HEIGHT= (FONT_HEIGHT+VERTICAL_SPACING)*(mGFFAString.length+1);
81 99
   
82
   private final float CRAWL_ANGLE = -30.0f;
100
  private final float CRAWL_ANGLE = -30.0f;
83 101
   
84
   private GLSurfaceView mView;
85
   private DistortedBitmap mScreen, mGFFA, mLogo, mCrawl, mCrawlBackground;
86
   private DistortedBitmap[] mStars;
87
   private long gffaID, logoID, crawlID;
102
  private GLSurfaceView mView;
103
  private DistortedBitmap mScreen, mGFFA, mLogo, mCrawl, mCrawlBackground;
104
  private DistortedBitmap[] mStars;
105
  private long gffaID, logoID, crawlID;
88 106
    
89
   private Random mRnd = new Random(0);
90
   private DistortedNode mRoot, mBackground;
107
  private Random mRnd = new Random(0);
108
  private DistortedNode mRoot, mBackground;
91 109
    
92 110
///////////////////////////////////////////////////////////////////////////////////////////////////
93 111

  
94
   public StarWarsRenderer(GLSurfaceView v) 
95
     {
96
     mView = v;
112
  public StarWarsRenderer(GLSurfaceView v) 
113
    {
114
    mView = v;
97 115
     
98
     Distorted.setFov(60.0f);
99
     }
116
    Distorted.setFov(60.0f);
117
    }
100 118

  
101 119
///////////////////////////////////////////////////////////////////////////////////////////////////
102 120
   
103
    public void onDrawFrame(GL10 glUnused) 
104
      {
105
      GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
106
      GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
121
  public void onDrawFrame(GL10 glUnused) 
122
    {
123
    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
124
    GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
107 125
     
108
      mRoot.draw(System.currentTimeMillis());
109
      }
126
    mRoot.draw(System.currentTimeMillis());
127
    }
110 128

  
111 129
///////////////////////////////////////////////////////////////////////////////////////////////////
112 130
    
113
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
114
      { 
115
      Distorted.onSurfaceChanged(width, height); 
116
      setupScreen(width,height);
117
      }
131
  public void onSurfaceChanged(GL10 glUnused, int width, int height) 
132
    { 
133
    Distorted.onSurfaceChanged(width, height); 
134
    setupScreen(width,height);
135
    }
118 136

  
119 137
///////////////////////////////////////////////////////////////////////////////////////////////////
120 138
    
121
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
122
      {
123
      setupBitmaps();
139
  public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
140
    {
141
    setupBitmaps();
124 142
         
125
      try
126
        {
127
        Distorted.onSurfaceCreated(mView.getContext());
128
        }
129
      catch(Exception ex)
130
        {
131
        android.util.Log.e("Star Wars", ex.getMessage() );
132
        }
143
    try
144
      {
145
      Distorted.onSurfaceCreated(mView.getContext());
146
      }
147
    catch(Exception ex)
148
      {
149
      android.util.Log.e("Star Wars", ex.getMessage() );
133 150
      }
151
    }
134 152
    
135 153
///////////////////////////////////////////////////////////////////////////////////////////////////
136 154

  
137
    private void setupScreen(int w, int h)
138
      {
139
      mScreen = new DistortedBitmap(w,h,1);
140
      mRoot = new DistortedNode(mScreen);
155
  private void setupScreen(int w, int h)
156
    {
157
    mScreen = new DistortedBitmap(w,h,1);
158
    mRoot = new DistortedNode(mScreen);
141 159
      
142
      mCrawlBackground = new DistortedBitmap(w,(int)(Math.sqrt(3.0)*h),1);
160
    mCrawlBackground = new DistortedBitmap(w,(int)(Math.sqrt(3.0)*h),1);
143 161
       
144
      int randomA, randomX, randomY, randomTime;
145
      float randomS, randomAlpha1, randomAlpha2;
162
    int randomA, randomX, randomY, randomTime;
163
    float randomS, randomAlpha1, randomAlpha2;
146 164
       
147
      Float3D rot = new Float3D(0,0,0);
148
      
149
      for(int i=0; i<NUM_STARS; i++)
150
        {
151
        randomX = mRnd.nextInt(w);
152
        randomY = mRnd.nextInt(h);
153
        randomS = 0.2f+ mRnd.nextFloat();
154
        randomA = (int)(180*mRnd.nextFloat());
155
        randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
156
        randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
157
        randomTime = 500+mRnd.nextInt(2000);
165
    Float3D rot = new Float3D(0,0,0);
158 166
      
159
        mStars[i].move( randomX,randomY,0);
160
        mStars[i].scale(randomS);
161
        mStars[i].rotate( rot, randomA);
162
      
163
        Interpolator1D di = new Interpolator1D();
164
        di.setDuration(randomTime);
165
        di.setCount(0.0f);
166
        di.setNoise(0.3f);
167
        di.add(new Float1D(randomAlpha1));
168
        di.add(new Float1D(randomAlpha2));
169
      
170
        mStars[i].alpha(di, null, new Float2D(0,0));
171
      
172
        mRoot.attach(mStars[i]);
173
        }
167
    for(int i=0; i<NUM_STARS; i++)
168
      {
169
      randomX = mRnd.nextInt(w);
170
      randomY = mRnd.nextInt(h);
171
      randomS = 0.2f+ mRnd.nextFloat();
172
      randomA = (int)(180*mRnd.nextFloat());
173
      randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
174
      randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
175
      randomTime = 500+mRnd.nextInt(2000);
174 176
      
175
      float scale = (0.5f*w/mGFFA.getWidth());
177
      mStars[i].move( randomX,randomY,0);
178
      mStars[i].scale(randomS);
179
      mStars[i].rotate( rot, randomA);
176 180
      
177 181
      Interpolator1D di = new Interpolator1D();
178
      di.setDuration(6000);
179
      di.setCount(0.5f);
180
      di.add(new Float1D(1.0f));
181
      di.add(new Float1D(1.0f));
182
      di.add(new Float1D(0.0f));
182
      di.setDuration(randomTime);
183
      di.setCount(0.0f);
184
      di.setNoise(0.3f);
185
      di.add(new Float1D(randomAlpha1));
186
      di.add(new Float1D(randomAlpha2));
183 187
      
184
      mGFFA.move( w/5, h/3, 0);
185
      mGFFA.scale(scale);
186
      mGFFA.alpha(di, null, new Float2D(0,0));
188
      mStars[i].alpha(di, null, new Float2D(0,0));
187 189
      
188
      mRoot.attach(mGFFA);
189
      mGFFA.addEventListener(this); 
190
      mRoot.attach(mStars[i]);
190 191
      }
192
      
193
    float scale = (0.5f*w/mGFFA.getWidth());
194
    
195
    Interpolator1D di = new Interpolator1D();
196
    di.setDuration(6000);
197
    di.setCount(0.5f);
198
    di.add(new Float1D(1.0f));
199
    di.add(new Float1D(1.0f));
200
    di.add(new Float1D(0.0f));
201
    
202
    mGFFA.move( w/5, h/3, 0);
203
    mGFFA.scale(scale);
204
    mGFFA.alpha(di, null, new Float2D(0,0));
205
      
206
    mRoot.attach(mGFFA);
207
    mGFFA.addEventListener(this); 
208
    }
191 209
    
192 210
///////////////////////////////////////////////////////////////////////////////////////////////////
193 211

  
194
    private void setupBitmaps()
195
      {
196
      InputStream is1 = mView.getContext().getResources().openRawResource(R.raw.starwars);
197
      InputStream is2 = mView.getContext().getResources().openRawResource(R.raw.star);
212
  private void setupBitmaps()
213
    {
214
    InputStream is1 = mView.getContext().getResources().openRawResource(R.raw.starwars);
215
    InputStream is2 = mView.getContext().getResources().openRawResource(R.raw.star);
198 216
    
199
      Bitmap bitmapStar, bitmapGFFA, bitmapLogo, bitmapText;
200
        
217
    Bitmap bitmapStar, bitmapGFFA, bitmapLogo, bitmapText;
218
      
219
    try 
220
      {
221
      bitmapLogo = BitmapFactory.decodeStream(is1);
222
      bitmapStar = BitmapFactory.decodeStream(is2);
223
      } 
224
    finally 
225
      {
201 226
      try 
202 227
        {
203
        bitmapLogo = BitmapFactory.decodeStream(is1);
204
        bitmapStar = BitmapFactory.decodeStream(is2);
205
        } 
206
      finally 
207
        {
208
        try 
209
          {
210
          is1.close();
211
          is2.close();
212
          } 
213
        catch(IOException e) { }
228
        is1.close();
229
        is2.close();
214 230
        } 
231
      catch(IOException e) { }
232
      } 
215 233
      
216
      Paint paint = new Paint();
217
      paint.setAntiAlias(true);
218
      paint.setTextAlign(Paint.Align.LEFT);
219
      paint.setTextSize(FONT_HEIGHT);
220
      paint.setColor(GFFA_COLOR);
234
    Paint paint = new Paint();
235
    paint.setAntiAlias(true);
236
    paint.setTextAlign(Paint.Align.LEFT);
237
    paint.setTextSize(FONT_HEIGHT);
238
    paint.setColor(GFFA_COLOR);
221 239
      
222
      Typeface tf = Typeface.create(CRAWL_TYPEFACE, Typeface.BOLD);
223
      paint.setTypeface(tf);     
240
    Typeface tf = Typeface.create(CRAWL_TYPEFACE, Typeface.BOLD);
241
    paint.setTypeface(tf);     
224 242
 
225
      ///// create GFFA ///////////////////
226
      mGFFA  = new DistortedBitmap(GFFA_WIDTH, GFFA_HEIGHT, 1);
227
      bitmapGFFA = Bitmap.createBitmap(GFFA_WIDTH,GFFA_HEIGHT,Bitmap.Config.ARGB_8888);
228
      bitmapGFFA.eraseColor(0x00000000);
229
      Canvas gffaCanvas = new Canvas(bitmapGFFA);
243
    ///// create GFFA ///////////////////
244
    mGFFA  = new DistortedBitmap(GFFA_WIDTH, GFFA_HEIGHT, 1);
245
    bitmapGFFA = Bitmap.createBitmap(GFFA_WIDTH,GFFA_HEIGHT,Bitmap.Config.ARGB_8888);
246
    bitmapGFFA.eraseColor(0x00000000);
247
    Canvas gffaCanvas = new Canvas(bitmapGFFA);
230 248
      
231
      for(int i=0; i<mGFFAString.length; i++)
232
        {
233
        gffaCanvas.drawText(mGFFAString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), paint);  
234
        }
249
    for(int i=0; i<mGFFAString.length; i++)
250
      {
251
      gffaCanvas.drawText(mGFFAString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), paint);  
252
      }
235 253
  
236
      mGFFA.setBitmap(bitmapGFFA);
254
    mGFFA.setBitmap(bitmapGFFA);
237 255
      
238
      ///// create Logo ///////////////////
239
      mLogo  = new DistortedBitmap(bitmapLogo, 1);
256
    ///// create Logo ///////////////////
257
    mLogo  = new DistortedBitmap(bitmapLogo, 1);
240 258
      
241
      ///// create CRAWL //////////////////
242
      mCrawl = new DistortedBitmap(CRAWL_WIDTH, CRAWL_HEIGHT, 1);
243
      bitmapText = Bitmap.createBitmap(CRAWL_WIDTH,CRAWL_HEIGHT,Bitmap.Config.ARGB_8888);
244
      bitmapText.eraseColor(0x00000000);
245
      Canvas textCanvas = new Canvas(bitmapText);
246
      paint.setColor(CRAWL_COLOR);
259
    ///// create CRAWL //////////////////
260
    mCrawl = new DistortedBitmap(CRAWL_WIDTH, CRAWL_HEIGHT, 1);
261
    bitmapText = Bitmap.createBitmap(CRAWL_WIDTH,CRAWL_HEIGHT,Bitmap.Config.ARGB_8888);
262
    bitmapText.eraseColor(0x00000000);
263
    Canvas textCanvas = new Canvas(bitmapText);
264
    paint.setColor(CRAWL_COLOR);
247 265
  
248
      for(int i=0; i<mCRAWLString.length; i++)
249
        {
250
        displayJustified(mCRAWLString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), CRAWL_WIDTH, textCanvas, paint);  
251
        }
252
      
253
      mCrawl.setBitmap(bitmapText);
266
    for(int i=0; i<mCRAWLString.length; i++)
267
      {
268
      displayJustified(mCRAWLString[i], 0, (i+1)*(FONT_HEIGHT+VERTICAL_SPACING), CRAWL_WIDTH, textCanvas, paint);  
269
      }
254 270
      
255
      ///// create Stars ///////////////////
271
    mCrawl.setBitmap(bitmapText);
256 272
      
257
      mStars = new DistortedBitmap[NUM_STARS];
273
    ///// create Stars ///////////////////
258 274
      
259
      mStars[0] = new DistortedBitmap(bitmapStar,1);
275
    mStars = new DistortedBitmap[NUM_STARS];
260 276
      
261
      for(int i=1; i<NUM_STARS; i++)
262
        {
263
        mStars[i] = new DistortedBitmap(mStars[0], Distorted.CLONE_BITMAP|Distorted.CLONE_VERTEX);  
264
        }
277
    mStars[0] = new DistortedBitmap(bitmapStar,1);
265 278
      
266
      gffaID = mGFFA.getID();
267
      logoID = mLogo.getID();
268
      crawlID= mCrawl.getID();
279
    for(int i=1; i<NUM_STARS; i++)
280
      {
281
      mStars[i] = new DistortedBitmap(mStars[0], Distorted.CLONE_BITMAP|Distorted.CLONE_VERTEX);  
269 282
      }
283
      
284
    gffaID = mGFFA.getID();
285
    logoID = mLogo.getID();
286
    crawlID= mCrawl.getID();
287
    }
270 288
 
271 289
///////////////////////////////////////////////////////////////////////////////////////////////////
272 290

  
273
   private void displayJustified(String str, int x, int y, int length, Canvas c, Paint paint)
274
      { 
275
      int len       = str.length();
276
      int numspaces = retNumSpaces(str);
291
  private void displayJustified(String str, int x, int y, int length, Canvas c, Paint paint)
292
    { 
293
    int len       = str.length();
294
    int numspaces = retNumSpaces(str);
277 295
    
278
      if( len>0 && str.charAt(len-1) == ' ' ) numspaces--;
296
    if( len>0 && str.charAt(len-1) == ' ' ) numspaces--;
279 297

  
280
      float left=x,w = (numspaces>0 ? (length-paint.measureText(str))/numspaces : 0);
281
      String tmp;
282
      int begin,end=0;
298
    float left=x,w = (numspaces>0 ? (length-paint.measureText(str))/numspaces : 0);
299
    String tmp;
300
    int begin,end=0;
283 301

  
284
      while( end<len )
285
        {
286
        begin=end;
287
        end = str.indexOf(' ', begin)+1;
288
        if( end<=0 ) end = len;
302
    while( end<len )
303
      {
304
      begin=end;
305
      end = str.indexOf(' ', begin)+1;
306
      if( end<=0 ) end = len;
289 307

  
290
        tmp = str.substring(begin,end);
291
        c.drawText( tmp, left, y, paint);
292
        left+= (paint.measureText(tmp)+w);
293
        }  
294
      }
308
      tmp = str.substring(begin,end);
309
      c.drawText( tmp, left, y, paint);
310
      left+= (paint.measureText(tmp)+w);
311
      }  
312
    }
295 313

  
296 314
///////////////////////////////////////////////////////////////////////////////////////////////////
297 315
   
298
   private int retNumSpaces(String str)
299
      {
300
      int begin=0, ret=0;
301

  
302
      while( true )
303
        {
304
        begin = str.indexOf(' ', begin) +1;
316
  private int retNumSpaces(String str)
317
    {
318
    int begin=0, ret=0;
305 319

  
306
        if( begin>0 ) ret++;
307
        else break;
308
        }
320
    while( true )
321
      {
322
      begin = str.indexOf(' ', begin) +1;
309 323

  
310
      return ret;
324
      if( begin>0 ) ret++;
325
      else break;
311 326
      }
327

  
328
    return ret;
329
    }
312 330
    
313 331
///////////////////////////////////////////////////////////////////////////////////////////////////
314 332

  
315
    public void effectMessage(final EffectMessage em, final long effectID, final int effectName, final long bitmapID, final String message)
333
  public void effectMessage(final EffectMessage em, final long effectID, final int effectName, final long bitmapID, final String message)
334
    {
335
    if( em==EffectMessage.EFFECT_FINISHED )
316 336
      {
317
      if( em==EffectMessage.EFFECT_FINISHED )
337
      if( bitmapID == gffaID )
318 338
        {
319
        if( bitmapID == gffaID )
320
          {
321
          mRoot.detach(mGFFA);   
322
          mGFFA.removeEventListener(this);
339
        mRoot.detach(mGFFA);   
340
        mGFFA.removeEventListener(this);
323 341
       
324
          int screenW=mScreen.getWidth();
325
          int screenH=mScreen.getHeight();
342
        int screenW=mScreen.getWidth();
343
        int screenH=mScreen.getHeight();
326 344
        
327
          int logoW = mLogo.getWidth();
328
          int logoH = mLogo.getHeight();
345
        int logoW = mLogo.getWidth();
346
        int logoH = mLogo.getHeight();
329 347
      
330
          int initSize= (int)(3.0f*screenW/logoW);
331
          int finaSize= (int)(0.1f*screenW/logoW);
348
        int initSize= (int)(3.0f*screenW/logoW);
349
        int finaSize= (int)(0.1f*screenW/logoW);
332 350
      
333
          Interpolator3D di = new Interpolator3D();
351
        Interpolator3D di = new Interpolator3D();
334 352
      
335
          di.add(new Float3D(initSize,initSize,1));
336
          di.add(new Float3D(finaSize,finaSize,1));
337
          di.setCount(0.5f);
338
          di.setDuration(10000);
353
        di.add(new Float3D(initSize,initSize,1));
354
        di.add(new Float3D(finaSize,finaSize,1));
355
        di.setCount(0.5f);
356
        di.setDuration(10000);
339 357
      
340
          mLogo.move( screenW/2, screenH/2, 0);
341
          mLogo.scale(di);
342
          mLogo.move( -logoW/2, -logoH/2, 0);
358
        mLogo.move( screenW/2, screenH/2, 0);
359
        mLogo.scale(di);
360
        mLogo.move( -logoW/2, -logoH/2, 0);
343 361
      
344
          mRoot.attach(mLogo);
345
          mLogo.addEventListener(this);
346
          }
347
        else if( bitmapID==logoID )
348
          {
349
          mRoot.detach(mLogo);   
350
          mLogo.removeEventListener(this);
351
        
352
          int crawlW = mCrawl.getWidth();
353
          int crawlH = mCrawl.getHeight();
354
          int screenW= mScreen.getWidth();
355
          int screenH= mScreen.getHeight();
356
          int backH  = mCrawlBackground.getHeight();
357
          float scale= (float)screenW/crawlW;
362
        mRoot.attach(mLogo);
363
        mLogo.addEventListener(this);
364
        }
365
      else if( bitmapID==logoID )
366
        {
367
        mRoot.detach(mLogo);   
368
        mLogo.removeEventListener(this);
358 369
        
359
          Interpolator3D di = new Interpolator3D();
360
          di.setCount(0.5f);
361
          di.setDuration(60000);
362
          di.add(new Float3D(screenW/2,+backH       , 0));
363
          di.add(new Float3D(screenW/2,-scale*crawlH, 0));
370
        int crawlW = mCrawl.getWidth();
371
        int crawlH = mCrawl.getHeight();
372
        int screenW= mScreen.getWidth();
373
        int screenH= mScreen.getHeight();
374
        int backH  = mCrawlBackground.getHeight();
375
        float scale= (float)screenW/crawlW;
376
      
377
        Interpolator3D di = new Interpolator3D();
378
        di.setCount(0.5f);
379
        di.setDuration(60000);
380
        di.add(new Float3D(screenW/2,+backH       , 0));
381
        di.add(new Float3D(screenW/2,-scale*crawlH, 0));
364 382
        
365
          mCrawlBackground.move(0,screenH-backH,0);
366
          mCrawlBackground.rotate(new Float3D(screenW/2,backH,0), CRAWL_ANGLE, 1.0f, 0.0f, 0.0f);
383
        mCrawlBackground.move(0,screenH-backH,0);
384
        mCrawlBackground.rotate(new Float3D(screenW/2,backH,0), CRAWL_ANGLE, 1.0f, 0.0f, 0.0f);
367 385
        
368
          final int transpDistance = 5;
369
          mCrawlBackground.smooth_alpha((1-transpDistance/2)*1.0f, new Float4D(0,0,transpDistance*backH,transpDistance*backH), new Float2D(screenW/2,(1-transpDistance)*backH));
386
        final int transpDistance = 5;
387
        mCrawlBackground.smooth_alpha((1-transpDistance/2)*1.0f, new Float4D(0,0,transpDistance*backH,transpDistance*backH), new Float2D(screenW/2,(1-transpDistance)*backH));
370 388
        
371
          mCrawl.move(di);
372
          mCrawl.scale(scale);
373
          mCrawl.move(-crawlW/2,0,0);
389
        mCrawl.move(di);
390
        mCrawl.scale(scale);
391
        mCrawl.move(-crawlW/2,0,0);
374 392
        
375
          mBackground = mRoot.attach(mCrawlBackground);
376
          mBackground.attach(mCrawl);
377
          mCrawl.addEventListener(this);
378
          }
379
        else if( bitmapID==crawlID )
380
          {
381
          mRoot.detach(mBackground);
382
          mBackground.detach(mCrawl);
383
          mCrawl.removeEventListener(this);
384
          }
393
        mBackground = mRoot.attach(mCrawlBackground);
394
        mBackground.attach(mCrawl);
395
        mCrawl.addEventListener(this);
396
        }
397
      else if( bitmapID==crawlID )
398
        {
399
        mRoot.detach(mBackground);
400
        mBackground.detach(mCrawl);
401
        mCrawl.removeEventListener(this);
385 402
        }
386 403
      }
387
}
388
///////////////////////////////////////////////////////////////////////////////////////////////////
404
    }
405
  }

Also available in: Unified diff