Project

General

Profile

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

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

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