Project

General

Profile

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

examples / src / main / java / org / distorted / examples / dynamic / DynamicActivity.java @ c0f27889

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;
47

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

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

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

    
61
      mNoise0=mNoise1=mNoise2=mNoise3=0;
62
      mDim = DynamicSurfaceView.DIM_2D;
63
      mMode= Dynamic1D.MODE_LOOP;
64

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

    
78
      Spinner dimensionSpinner  = findViewById(R.id.dynamicSpinnerDimension);
79
      dimensionSpinner.setOnItemSelectedListener(this);
80
      String[] dimensions = { "Dimension 1" , "Dimension 2" , "Dimension 3 (XY)" , "Dimension 3 (XZ)" , "Dimension 4 (XY)" , "Dimension 4 (ZW)" , "Quaternion XY" , "Quaternion ZW" };
81

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

    
87
      Spinner modeSpinner  = findViewById(R.id.dynamicSpinnerMode);
88
      modeSpinner.setOnItemSelectedListener(this);
89
      String[] modes = { "MODE_LOOP" , "MODE_PATH" , "MODE_JUMP" };
90

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

    
96
      if( savedState==null )
97
        {
98
        barD.setProgress(50);
99
        barC.setProgress(20);
100
        barX.setProgress(50);
101
        bar0.setProgress(0);
102
        bar1.setProgress(0);
103
        bar2.setProgress(0);
104

    
105
        Toast toast = Toast.makeText(this, R.string.example_dynamic_toast, Toast.LENGTH_LONG);
106
        toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);
107
        toast.show();
108
        }
109
      }
110

    
111
///////////////////////////////////////////////////////////////////////////////////////////////////
112

    
113
    @Override
114
    protected void onPause()
115
      {
116
      super.onPause();
117

    
118
      GLSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
119
      v1.onPause();
120
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
121
      v2.onPause();
122

    
123
      DistortedLibrary.onPause();
124
      }
125

    
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127

    
128
    @Override
129
    protected void onResume() 
130
      {
131
      super.onResume();
132
      
133
      GLSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
134
      v1.onResume();
135
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
136
      v2.onResume();
137
      }
138

    
139
///////////////////////////////////////////////////////////////////////////////////////////////////
140

    
141
    @Override
142
    public void onStop()
143
      {
144
      super.onStop();
145
      }
146

    
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148

    
149
    @Override
150
    public void onDestroy()
151
      {  
152
      DistortedLibrary.onDestroy();
153
      super.onDestroy();
154
      }     
155

    
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157

    
158
    void setNumRedPoints(int numPoints)
159
      {
160
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
161
      view.setNumRedPoints(numPoints);
162
      }
163

    
164
///////////////////////////////////////////////////////////////////////////////////////////////////
165

    
166
    void addPoint(float x, float y)
167
      {
168
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
169
      view.addPoint(x,y);
170
      }
171

    
172
///////////////////////////////////////////////////////////////////////////////////////////////////
173

    
174
    void clearPoints()
175
      {
176
      DynamicSpeedSurfaceView view = findViewById(R.id.dynamicSpeedSurfaceView);
177
      view.clearPoints();
178
      }
179

    
180
///////////////////////////////////////////////////////////////////////////////////////////////////
181

    
182
    public void setDim(int dim)
183
      {
184
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
185
      view.setDimension(dim);
186
      mDim = dim;
187
      }
188

    
189
///////////////////////////////////////////////////////////////////////////////////////////////////
190

    
191
    public void setMode(int mode)
192
      {
193
      DynamicSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
194
      v1.setMode(mode);
195
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
196
      v2.setMode(mode);
197

    
198
      mMode = mode;
199
      }
200

    
201
///////////////////////////////////////////////////////////////////////////////////////////////////
202

    
203
    public void Start(View v)
204
      {
205
      DynamicSpeedSurfaceView v2 = findViewById(R.id.dynamicSpeedSurfaceView);
206
      v2.clearPoints();
207
      DynamicSurfaceView v1 = findViewById(R.id.dynamicSurfaceView);
208
      v1.startDynamic();
209
      }
210

    
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212

    
213
    public void Reset(View v)
214
      {
215
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
216
      view.resetPoints();
217
      view.stopDynamic();
218
      }
219

    
220
///////////////////////////////////////////////////////////////////////////////////////////////////
221

    
222
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
223
      {
224
      int spinnerID = parent.getId();
225

    
226
      if( spinnerID == R.id.dynamicSpinnerDimension )
227
        {
228
        switch(pos)
229
          {
230
          case 0: setDim(DynamicSurfaceView.DIM_1D  ); break;
231
          case 1: setDim(DynamicSurfaceView.DIM_2D  ); break;
232
          case 2: setDim(DynamicSurfaceView.DIM_3DXY); break;
233
          case 3: setDim(DynamicSurfaceView.DIM_3DXZ); break;
234
          case 4: setDim(DynamicSurfaceView.DIM_4DXY); break;
235
          case 5: setDim(DynamicSurfaceView.DIM_4DZW); break;
236
          case 6: setDim(DynamicSurfaceView.DIM_Q_XY); break;
237
          case 7: setDim(DynamicSurfaceView.DIM_Q_ZW); break;
238
          }
239
        }
240
      else if( spinnerID == R.id.dynamicSpinnerMode )
241
        {
242
        switch(pos)
243
          {
244
          case 0: setMode(Dynamic.MODE_LOOP); break;
245
          case 1: setMode(Dynamic.MODE_PATH); break;
246
          case 2: setMode(Dynamic.MODE_JUMP); break;
247
          }
248
        }
249
      }
250

    
251
///////////////////////////////////////////////////////////////////////////////////////////////////
252

    
253
    @Override
254
    public void onSaveInstanceState(Bundle savedInstanceState)
255
      {
256
      super.onSaveInstanceState(savedInstanceState);
257

    
258
      savedInstanceState.putInt("dim" , mDim );
259
      savedInstanceState.putInt("mode", mMode);
260
      }
261

    
262
///////////////////////////////////////////////////////////////////////////////////////////////////
263

    
264
    @Override
265
    public void onRestoreInstanceState(Bundle savedInstanceState)
266
      {
267
      super.onRestoreInstanceState(savedInstanceState);
268

    
269
      mDim = savedInstanceState.getInt("dim");
270
      mMode= savedInstanceState.getInt("mode");
271

    
272
      setDim(mDim);
273
      setMode(mMode);
274
      }
275

    
276
///////////////////////////////////////////////////////////////////////////////////////////////////
277

    
278
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
279
      {
280
      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
281
      int id = bar.getId();
282

    
283
      if( id == R.id.dynamicSeekDuration )
284
        {
285
        float v = progress*200;
286
        int i = (int)(v/100);
287
        float t = i/10.0f;
288
        view.setDuration((int)v);
289
        textDuration.setText(getString(R.string.duration_placeholder, (int)t ));
290
        }
291
      else if( id == R.id.dynamicSeekCount )
292
        {
293
        float count = progress*0.05f;
294
        view.setCount(count);
295
        textCount.setText(getString(R.string.count_placeholder, count ));
296
        }
297
      else if( id == R.id.dynamicSeekConvexity )
298
        {
299
        float convexity = progress/25.0f - 1.0f;
300
        view.setConvexity(convexity);
301
        textConvexity.setText(getString(R.string.convexity_placeholder, convexity ));
302
        }
303
      else
304
        {
305
        switch(id)
306
          {
307
          case R.id.dynamicSeekNoise0  : mNoise0 = progress; break;
308
          case R.id.dynamicSeekNoise1  : mNoise1 = progress; break;
309
          case R.id.dynamicSeekNoise2  : mNoise2 = progress; break;
310
          case R.id.dynamicSeekNoise3  : mNoise3 = progress; break;
311
          }
312

    
313
        float n0 = mNoise0/100.f;
314
        float n1 = mNoise1/100.f;
315
        float n2 = mNoise2/100.f;
316
        float n3 = mNoise3/100.f;
317

    
318
        view.setNoise(n0,n1,n2,n3);
319
        textNoise.setText(getString(R.string.noise3_placeholder, n0,n1,n2,n3 ));
320
        }
321
      }
322

    
323
///////////////////////////////////////////////////////////////////////////////////////////////////
324

    
325
    public void onStartTrackingTouch(SeekBar bar) { }
326
    public void onStopTrackingTouch(SeekBar bar)  { }
327
    public void onNothingSelected(AdapterView<?> parent) { }
328
}
(1-1/4)