Project

General

Profile

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

examples / src / main / java / org / distorted / examples / dynamic / DynamicActivity.java @ 5690134d

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
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.examples.dynamic;
21

    
22
import org.distorted.library.main.DistortedLibrary;
23
import org.distorted.library.type.Dynamic;
24
import org.distorted.library.type.Dynamic1D;
25
import org.distorted.examples.R;
26

    
27
import android.app.Activity;
28
import android.opengl.GLSurfaceView;
29
import android.os.Bundle;
30
import android.view.Gravity;
31
import android.view.View;
32
import android.widget.AdapterView;
33
import android.widget.ArrayAdapter;
34
import android.widget.SeekBar;
35
import android.widget.Spinner;
36
import android.widget.TextView;
37
import android.widget.SeekBar.OnSeekBarChangeListener;
38
import android.widget.Toast;
39

    
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41

    
42
public class DynamicActivity extends Activity implements OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
43
    {
44
    private TextView textDuration, textCount, textNoise, textConvexity;
45
    private int mNoise0,mNoise1,mNoise2,mNoise3;
46
    private int mDim, mMode, mSpeed;
47

    
48
///////////////////////////////////////////////////////////////////////////////////////////////////
49

    
50
    @Override
51
    protected void onCreate(Bundle savedState)
52
      {
53
      super.onCreate(savedState);
54
      DistortedLibrary.onCreate();
55
      setContentView(R.layout.dynamicslayout);
56

    
57
      textDuration = findViewById(R.id.dynamicTextDuration);
58
      textCount    = findViewById(R.id.dynamicTextCount);
59
      textConvexity= findViewById(R.id.dynamicTextConvexity);
60
      textNoise    = findViewById(R.id.dynamicTextNoise);
61

    
62
      mNoise0=mNoise1=mNoise2=mNoise3=0;
63
      mDim  = DynamicSurfaceView.DIM_2D;
64
      mMode = Dynamic.MODE_LOOP;
65
      mSpeed= Dynamic.SPEED_MODE_SMOOTH;
66

    
67
      SeekBar barD = findViewById(R.id.dynamicSeekDuration);
68
      barD.setOnSeekBarChangeListener(this);
69
      SeekBar barC = findViewById(R.id.dynamicSeekCount);
70
      barC.setOnSeekBarChangeListener(this);
71
      SeekBar barX = findViewById(R.id.dynamicSeekConvexity);
72
      barX.setOnSeekBarChangeListener(this);
73
      SeekBar bar0 = findViewById(R.id.dynamicSeekNoise0);
74
      bar0.setOnSeekBarChangeListener(this);
75
      SeekBar bar1 = findViewById(R.id.dynamicSeekNoise1);
76
      bar1.setOnSeekBarChangeListener(this);
77
      SeekBar bar2 = findViewById(R.id.dynamicSeekNoise2);
78
      bar2.setOnSeekBarChangeListener(this);
79

    
80
      Spinner dimensionSpinner  = findViewById(R.id.dynamicSpinnerDimension);
81
      dimensionSpinner.setOnItemSelectedListener(this);
82
      String[] dimensions = { "Dim 1" , "Dim 2" , "Dim 3 (XY)" , "Dim 3 (XZ)" , "Dim 4 (XY)" , "Dim 4 (ZW)" , "Quat XY" , "Quat ZW" };
83

    
84
      ArrayAdapter<String> adapterDim = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dimensions );
85
      adapterDim.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
86
      dimensionSpinner.setAdapter(adapterDim);
87
      dimensionSpinner.setSelection(1);
88

    
89
      Spinner modeSpinner  = findViewById(R.id.dynamicSpinnerMode);
90
      modeSpinner.setOnItemSelectedListener(this);
91
      String[] modes = { "LOOP" , "PATH" , "JUMP" };
92

    
93
      ArrayAdapter<String> adapterMode = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, modes );
94
      adapterMode.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
95
      modeSpinner.setAdapter(adapterMode);
96
      modeSpinner.setSelection(0);
97

    
98
      Spinner speedSpinner  = findViewById(R.id.dynamicSpinnerSpeedMode);
99
      speedSpinner.setOnItemSelectedListener(this);
100
      String[] speeds = { "SMOOTH" , "SEGM_CONST" , "GLOB_CONST" };
101

    
102
      ArrayAdapter<String> adapterSpeed = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, speeds );
103
      adapterSpeed.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
104
      speedSpinner.setAdapter(adapterSpeed);
105
      speedSpinner.setSelection(0);
106

    
107
      if( savedState==null )
108
        {
109
        barD.setProgress(50);
110
        barC.setProgress(20);
111
        barX.setProgress(50);
112
        bar0.setProgress(0);
113
        bar1.setProgress(0);
114
        bar2.setProgress(0);
115

    
116
        Toast toast = Toast.makeText(this, R.string.example_dynamic_toast, Toast.LENGTH_LONG);
117
        toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);
118
        toast.show();
119
        }
120
      }
121

    
122
///////////////////////////////////////////////////////////////////////////////////////////////////
123

    
124
    @Override
125
    protected void onPause()
126
      {
127
      super.onPause();
128

    
129
      GLSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
130
      v1.onPause();
131
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
132
      v2.onPause();
133

    
134
      DistortedLibrary.onPause();
135
      }
136

    
137
///////////////////////////////////////////////////////////////////////////////////////////////////
138

    
139
    @Override
140
    protected void onResume() 
141
      {
142
      super.onResume();
143

    
144
      GLSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
145
      v1.onResume();
146
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
147
      v2.onResume();
148
      }
149

    
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151

    
152
    @Override
153
    public void onStop()
154
      {
155
      super.onStop();
156
      }
157

    
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159

    
160
    @Override
161
    public void onDestroy()
162
      {  
163
      DistortedLibrary.onDestroy();
164
      super.onDestroy();
165
      }     
166

    
167
///////////////////////////////////////////////////////////////////////////////////////////////////
168

    
169
    void setNumRedPoints(int numPoints)
170
      {
171
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
172
      view.setNumRedPoints(numPoints);
173
      }
174

    
175
///////////////////////////////////////////////////////////////////////////////////////////////////
176

    
177
    void addPoint(float x, float y)
178
      {
179
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
180
      view.addPoint(x,y);
181
      }
182

    
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184

    
185
    void clearPoints()
186
      {
187
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
188
      view.clearPoints();
189
      }
190

    
191
///////////////////////////////////////////////////////////////////////////////////////////////////
192

    
193
    public void setDim(int dim)
194
      {
195
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
196
      view.setDimension(dim);
197
      mDim = dim;
198
      }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
    public void setMode(int mode)
203
      {
204
      DynamicSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
205
      v1.setMode(mode);
206
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
207
      v2.setMode(mode);
208

    
209
      mMode = mode;
210
      }
211

    
212
///////////////////////////////////////////////////////////////////////////////////////////////////
213

    
214
    public void setSpeedMode(int mode)
215
      {
216
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
217
      view.setSpeedMode(mode);
218
      mSpeed = mode;
219
      }
220

    
221
///////////////////////////////////////////////////////////////////////////////////////////////////
222

    
223
    public void Start(View v)
224
      {
225
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
226
      v2.clearPoints();
227
      DynamicSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
228
      v1.startDynamic();
229
      }
230

    
231
///////////////////////////////////////////////////////////////////////////////////////////////////
232

    
233
    public void Reset(View v)
234
      {
235
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
236
      view.resetPoints();
237
      view.stopDynamic();
238
      }
239

    
240
///////////////////////////////////////////////////////////////////////////////////////////////////
241

    
242
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
243
      {
244
      int spinnerID = parent.getId();
245

    
246
      if( spinnerID == R.id.dynamicSpinnerDimension )
247
        {
248
        switch(pos)
249
          {
250
          case 0: setDim(DynamicSurfaceView.DIM_1D  ); break;
251
          case 1: setDim(DynamicSurfaceView.DIM_2D  ); break;
252
          case 2: setDim(DynamicSurfaceView.DIM_3DXY); break;
253
          case 3: setDim(DynamicSurfaceView.DIM_3DXZ); break;
254
          case 4: setDim(DynamicSurfaceView.DIM_4DXY); break;
255
          case 5: setDim(DynamicSurfaceView.DIM_4DZW); break;
256
          case 6: setDim(DynamicSurfaceView.DIM_Q_XY); break;
257
          case 7: setDim(DynamicSurfaceView.DIM_Q_ZW); break;
258
          }
259
        }
260
      else if( spinnerID == R.id.dynamicSpinnerMode )
261
        {
262
        switch(pos)
263
          {
264
          case 0: setMode(Dynamic.MODE_LOOP); break;
265
          case 1: setMode(Dynamic.MODE_PATH); break;
266
          case 2: setMode(Dynamic.MODE_JUMP); break;
267
          }
268
        }
269
      else if( spinnerID == R.id.dynamicSpinnerSpeedMode )
270
        {
271
        switch(pos)
272
          {
273
          case 0: setSpeedMode(Dynamic.SPEED_MODE_SMOOTH           ); break;
274
          case 1: setSpeedMode(Dynamic.SPEED_MODE_SEGMENT_CONSTANT ); break;
275
          case 2: setSpeedMode(Dynamic.SPEED_MODE_GLOBALLY_CONSTANT); break;
276
          }
277
        }
278
      }
279

    
280
///////////////////////////////////////////////////////////////////////////////////////////////////
281

    
282
    @Override
283
    public void onSaveInstanceState(Bundle savedInstanceState)
284
      {
285
      super.onSaveInstanceState(savedInstanceState);
286

    
287
      savedInstanceState.putInt("dim"  , mDim  );
288
      savedInstanceState.putInt("mode" , mMode );
289
      savedInstanceState.putInt("speed", mSpeed);
290
      }
291

    
292
///////////////////////////////////////////////////////////////////////////////////////////////////
293

    
294
    @Override
295
    public void onRestoreInstanceState(Bundle savedInstanceState)
296
      {
297
      super.onRestoreInstanceState(savedInstanceState);
298

    
299
      mDim  = savedInstanceState.getInt("dim");
300
      mMode = savedInstanceState.getInt("mode");
301
      mSpeed= savedInstanceState.getInt("speed");
302

    
303
      setDim(mDim);
304
      setMode(mMode);
305
      setSpeedMode(mSpeed);
306
      }
307

    
308
///////////////////////////////////////////////////////////////////////////////////////////////////
309

    
310
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
311
      {
312
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
313
      int id = bar.getId();
314

    
315
      if( id == R.id.dynamicSeekDuration )
316
        {
317
        float v = progress*200;
318
        int i = (int)(v/100);
319
        float t = i/10.0f;
320
        view.setDuration((int)v);
321
        textDuration.setText(getString(R.string.duration_placeholder, (int)t ));
322
        }
323
      else if( id == R.id.dynamicSeekCount )
324
        {
325
        float count = progress*0.05f;
326
        view.setCount(count);
327
        textCount.setText(getString(R.string.count_placeholder, count ));
328
        }
329
      else if( id == R.id.dynamicSeekConvexity )
330
        {
331
        float convexity = progress/25.0f - 1.0f;
332
        view.setConvexity(convexity);
333
        textConvexity.setText(getString(R.string.convexity_placeholder, convexity ));
334
        }
335
      else
336
        {
337
        switch(id)
338
          {
339
          case R.id.dynamicSeekNoise0  : mNoise0 = progress; break;
340
          case R.id.dynamicSeekNoise1  : mNoise1 = progress; break;
341
          case R.id.dynamicSeekNoise2  : mNoise2 = progress; break;
342
          case R.id.dynamicSeekNoise3  : mNoise3 = progress; break;
343
          }
344

    
345
        float n0 = mNoise0/100.f;
346
        float n1 = mNoise1/100.f;
347
        float n2 = mNoise2/100.f;
348
        float n3 = mNoise3/100.f;
349

    
350
        view.setNoise(n0,n1,n2,n3);
351
        textNoise.setText(getString(R.string.noise3_placeholder, n0,n1,n2,n3 ));
352
        }
353
      }
354

    
355
///////////////////////////////////////////////////////////////////////////////////////////////////
356

    
357
    public void onStartTrackingTouch(SeekBar bar) { }
358
    public void onStopTrackingTouch(SeekBar bar)  { }
359
    public void onNothingSelected(AdapterView<?> parent) { }
360
}
(1-1/4)