Project

General

Profile

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

examples / src / main / java / org / distorted / examples / matrix3d / Matrix3DActivity.java @ 6f3024ae

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 db5d943e Leszek Koltunski
package org.distorted.examples.matrix3d;
21 427ab7bf Leszek Koltunski
22
import android.app.Activity;
23 4d5b37fe Leszek Koltunski
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25 427ab7bf Leszek Koltunski
import android.opengl.GLSurfaceView;
26 4d5b37fe Leszek Koltunski
import android.os.Bundle;
27 427ab7bf Leszek Koltunski
import android.view.View;
28 4d5b37fe Leszek Koltunski
import android.widget.AdapterView;
29
import android.widget.ArrayAdapter;
30 427ab7bf Leszek Koltunski
import android.widget.LinearLayout;
31 4d5b37fe Leszek Koltunski
import android.widget.Spinner;
32 427ab7bf Leszek Koltunski
33 4d5b37fe Leszek Koltunski
import org.distorted.examples.R;
34
import org.distorted.library.Distorted;
35 d04a4886 Leszek Koltunski
import org.distorted.library.DistortedEffects;
36 10b7e588 Leszek Koltunski
import org.distorted.library.GridObject;
37
import org.distorted.library.GridCubes;
38 f6d884d5 Leszek Koltunski
import org.distorted.library.DistortedTexture;
39 4d5b37fe Leszek Koltunski
import org.distorted.library.EffectNames;
40
import org.distorted.library.EffectTypes;
41
42
import java.io.IOException;
43
import java.io.InputStream;
44
import java.util.ArrayList;
45 427ab7bf Leszek Koltunski
46
///////////////////////////////////////////////////////////////////////////////////////////////////
47 4d5b37fe Leszek Koltunski
48
public class Matrix3DActivity extends Activity implements AdapterView.OnItemSelectedListener
49
  {
50 f6d884d5 Leszek Koltunski
  private DistortedTexture mTexture;
51 10b7e588 Leszek Koltunski
  private GridObject mGrid;
52 d04a4886 Leszek Koltunski
  private DistortedEffects mEffects;
53 4d5b37fe Leszek Koltunski
54 d04a4886 Leszek Koltunski
  private ArrayList<Matrix3DEffect> mList;
55 4d5b37fe Leszek Koltunski
  private int mEffectAdd;
56
57
  private EffectNames[] mEffectNames;
58
59
  private static boolean mSupportsCenter;
60 427ab7bf Leszek Koltunski
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62
63 4d5b37fe Leszek Koltunski
  @Override
64
  protected void onCreate(Bundle savedState)
65
    {
66
    super.onCreate(savedState);
67
68 d04a4886 Leszek Koltunski
    mList = new ArrayList<>();
69 4d5b37fe Leszek Koltunski
70
    createEffectNames();
71
72 d04a4886 Leszek Koltunski
    mEffects = new DistortedEffects();
73 10b7e588 Leszek Koltunski
    mGrid   = new GridCubes(1,1,false);
74 7451c98a Leszek Koltunski
    mTexture= new DistortedTexture(100,100);
75 4d5b37fe Leszek Koltunski
76
    setEffectView();
77
    }
78
79 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
80 4d5b37fe Leszek Koltunski
81
  private void createEffectNames()
82
    {
83
    EffectTypes type = EffectTypes.MATRIX;
84
85
    EffectNames[] names = EffectNames.values();
86
87
    int numEffects=0;
88
89
    for(int i=0; i<names.length; i++)
90
      if( names[i].getType() == type ) numEffects++;
91
92
    mEffectNames = new EffectNames[numEffects];
93
94
    numEffects=0;
95
96
    for(int i=0; i<names.length; i++)
97
      if( names[i].getType() == type )
98 427ab7bf Leszek Koltunski
        {
99 4d5b37fe Leszek Koltunski
        mEffectNames[numEffects++] = names[i];
100 427ab7bf Leszek Koltunski
        }
101 4d5b37fe Leszek Koltunski
    }
102 427ab7bf Leszek Koltunski
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105 d04a4886 Leszek Koltunski
  public DistortedEffects getEffects()
106 4d5b37fe Leszek Koltunski
    {
107 d04a4886 Leszek Koltunski
    return mEffects;
108 f6d884d5 Leszek Koltunski
    }
109
110
///////////////////////////////////////////////////////////////////////////////////////////////////
111
112
  public DistortedTexture getTexture()
113
    {
114
    return mTexture;
115 4d5b37fe Leszek Koltunski
    }
116
117 e8b6aa95 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
118
119 10b7e588 Leszek Koltunski
  public GridObject getGrid()
120 e8b6aa95 Leszek Koltunski
    {
121
    return mGrid;
122
    }
123
124 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
125
126 4d5b37fe Leszek Koltunski
  public void setRegion(float x, float y, float r)
127
    {
128
129
    }
130 427ab7bf Leszek Koltunski
131
///////////////////////////////////////////////////////////////////////////////////////////////////
132
133 334c13fa Leszek Koltunski
  public void setCenter(float x, float y, float z)
134 4d5b37fe Leszek Koltunski
    {
135 dcd024be Leszek Koltunski
136 4d5b37fe Leszek Koltunski
    }
137
138 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
139
140 4d5b37fe Leszek Koltunski
  public static void setSupportsRegion(boolean supports)
141
    {
142
143
    }
144 427ab7bf Leszek Koltunski
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146 4d5b37fe Leszek Koltunski
147
  public static void setSupportsCenter(boolean supports)
148
    {
149
    mSupportsCenter = supports;
150
    }
151 427ab7bf Leszek Koltunski
152
///////////////////////////////////////////////////////////////////////////////////////////////////
153
154 4d5b37fe Leszek Koltunski
  public Bitmap getBitmap()
155
    {
156
    Bitmap bmp;
157
158
    InputStream is = getResources().openRawResource(R.raw.grid);
159
160
    try
161
      {
162
      bmp = BitmapFactory.decodeStream(is);
163
      }
164
    finally
165 427ab7bf Leszek Koltunski
      {
166 4d5b37fe Leszek Koltunski
      try
167
        {
168
        is.close();
169
        }
170
      catch(IOException e) { }
171 427ab7bf Leszek Koltunski
      }
172
173 4d5b37fe Leszek Koltunski
    return bmp;
174
    }
175
176 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
177
178 4d5b37fe Leszek Koltunski
  public int getWidth()
179
    {
180 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getWidth();
181 4d5b37fe Leszek Koltunski
    }
182 427ab7bf Leszek Koltunski
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184
185 4d5b37fe Leszek Koltunski
  public int getHeight()
186
    {
187 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getHeight();
188 4d5b37fe Leszek Koltunski
    }
189 427ab7bf Leszek Koltunski
190 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
191
192 f6d884d5 Leszek Koltunski
  public int getDepth()
193 334c13fa Leszek Koltunski
    {
194 7451c98a Leszek Koltunski
    return mTexture==null ? 0: mTexture.getDepth(mGrid);
195 334c13fa Leszek Koltunski
    }
196
197
///////////////////////////////////////////////////////////////////////////////////////////////////
198
199 f6d884d5 Leszek Koltunski
  public int getScreenWidth()
200 334c13fa Leszek Koltunski
    {
201
    Matrix3DRenderer r = ((Matrix3DSurfaceView)findViewById(R.id.matrix3dSurfaceView)).getRenderer();
202 f6d884d5 Leszek Koltunski
    return r.getWidth();
203 334c13fa Leszek Koltunski
    }
204
205 6f3024ae Leszek Koltunski
//////////////////////////////////////////////////////////////////////////////////
206 427ab7bf Leszek Koltunski
207 4d5b37fe Leszek Koltunski
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
208
    {
209
    switch(parent.getId())
210 427ab7bf Leszek Koltunski
      {
211 40eef4b9 Leszek Koltunski
      case R.id.matrix3dspinner: mEffectAdd = pos;
212
                                 break;
213 427ab7bf Leszek Koltunski
      }
214 4d5b37fe Leszek Koltunski
    }
215
216 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
217
218 4d5b37fe Leszek Koltunski
  public void onNothingSelected(AdapterView<?> parent)
219
    {
220
    }
221 427ab7bf Leszek Koltunski
222
///////////////////////////////////////////////////////////////////////////////////////////////////
223
224 4d5b37fe Leszek Koltunski
  private void resetData()
225
    {
226
    mSupportsCenter=false;
227
    }
228 427ab7bf Leszek Koltunski
229
///////////////////////////////////////////////////////////////////////////////////////////////////
230
231 4d5b37fe Leszek Koltunski
  private void setEffectView()
232
    {
233
    resetData();
234
235
    final View view = getLayoutInflater().inflate(R.layout.matrix3dlayout, null);
236
237
    setContentView(view);
238
239
    String[] effects = new String[mEffectNames.length];
240
241
    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
242
243
    Spinner effectSpinner = (Spinner)findViewById(R.id.matrix3dspinner );
244
    effectSpinner.setOnItemSelectedListener(this);
245
246
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
247
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
248
    effectSpinner.setAdapter(adapterEffect);
249
250
    mEffectAdd = 0;
251
    }
252 427ab7bf Leszek Koltunski
253
///////////////////////////////////////////////////////////////////////////////////////////////////
254 4d5b37fe Leszek Koltunski
255
  public void newEffect(View v)
256
    {
257
    Matrix3DEffect eff = new Matrix3DEffect(mEffectNames[mEffectAdd], this);
258 d04a4886 Leszek Koltunski
    mList.add(eff);
259 4d5b37fe Leszek Koltunski
260
    LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
261
    View view = eff.createView();
262
    layout.addView(view);
263
264
    if( mSupportsCenter )
265 427ab7bf Leszek Koltunski
      {
266 4d5b37fe Leszek Koltunski
      View center = eff.createCenter();
267
      layout.addView(center);
268 427ab7bf Leszek Koltunski
      }
269
270 d04a4886 Leszek Koltunski
    eff.apply(mEffects);
271 4d5b37fe Leszek Koltunski
    }
272
273 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
274 4d5b37fe Leszek Koltunski
275
  public void removeAll(View v)
276
    {
277 d04a4886 Leszek Koltunski
    mList.clear();
278 4d5b37fe Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
279
    layout.removeAllViews();
280 d04a4886 Leszek Koltunski
    mEffects.abortEffects(EffectTypes.MATRIX);
281 4d5b37fe Leszek Koltunski
282
    resetData();
283
    }
284
285 427ab7bf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
286 4d5b37fe Leszek Koltunski
287
  public void remove(View v)
288
    {
289 d04a4886 Leszek Koltunski
    for(Matrix3DEffect effect: mList)
290 427ab7bf Leszek Koltunski
      {
291 4d5b37fe Leszek Koltunski
      if( effect.thisView(v) )
292 427ab7bf Leszek Koltunski
        {
293 4d5b37fe Leszek Koltunski
        LinearLayout layout = (LinearLayout)findViewById(R.id.matrix3dlayout);
294
        View view;
295
296
        view = effect.getEffect();
297
        if( view!=null ) layout.removeView(view);
298
        view = effect.getCenter();
299
        if( view!=null ) layout.removeView(view);
300
        view = effect.getRegion();
301
        if( view!=null ) layout.removeView(view);
302
303 d04a4886 Leszek Koltunski
        mEffects.abortEffect(effect.getId());
304
        mList.remove(effect);
305 4d5b37fe Leszek Koltunski
306
        resetData();
307
308
        break;
309 427ab7bf Leszek Koltunski
        }
310
      }
311 4d5b37fe Leszek Koltunski
    }
312 427ab7bf Leszek Koltunski
313
///////////////////////////////////////////////////////////////////////////////////////////////////
314 4d5b37fe Leszek Koltunski
// Overrides
315
316
  @Override
317
  protected void onPause()
318
    {
319
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.matrix3dSurfaceView);
320
    if( mView!=null ) mView.onPause();
321
    super.onPause();
322
    }
323 427ab7bf Leszek Koltunski
324
///////////////////////////////////////////////////////////////////////////////////////////////////
325 4d5b37fe Leszek Koltunski
    
326
  @Override
327
  protected void onResume()
328
    {
329
    super.onResume();
330
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.matrix3dSurfaceView);
331
    if( mView!=null ) mView.onResume();
332
    }
333 427ab7bf Leszek Koltunski
334 4d5b37fe Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
335 427ab7bf Leszek Koltunski
    
336 4d5b37fe Leszek Koltunski
  @Override
337
  protected void onDestroy()
338
    {
339
    Distorted.onDestroy();
340
    super.onDestroy();
341
    }
342
343
  }