• R/O
  • SSH
  • HTTPS

mikumikudroid: Commit


Commit MetaInfo

Révision103 (tree)
l'heure2011-07-05 04:54:48
Auteurohsawa

Message de Log

Physics On/Off menu is added.
Playback control interface is updated.

Change Summary

Modification

--- trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/MikuMikuDroid.java (revision 102)
+++ trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/MikuMikuDroid.java (revision 103)
@@ -19,6 +19,9 @@
1919 import android.view.Menu;
2020 import android.view.MenuItem;
2121 import android.view.MotionEvent;
22+import android.view.View;
23+import android.view.View.OnClickListener;
24+import android.widget.Button;
2225 import android.widget.RelativeLayout;
2326 import android.widget.RelativeLayout.LayoutParams;
2427 import android.widget.SeekBar;
@@ -30,6 +33,8 @@
3033 private MMGLSurfaceView mMMGLSurfaceView;
3134 private RelativeLayout mRelativeLayout;
3235 private SeekBar mSeekBar;
36+ private Button mPlayPauseButton;
37+ private Button mRewindButton;
3338
3439 // Model
3540 private CoreLogic mCoreLogic;
@@ -52,25 +57,6 @@
5257 mCoreLogic = new CoreLogic(this) {
5358 @Override
5459 public void onInitialize() {
55- /*
56- try {
57- mCoreLogic.restoreState();
58- final int max = mCoreLogic.getDulation();
59- mSeekBar.post(new Runnable() {
60- @Override
61- public void run() {
62- mSeekBar.setMax(max);
63- }
64- });
65- } catch (OutOfMemoryError e) {
66- MikuMikuDroid.this.runOnUiThread(new Runnable() {
67- @Override
68- public void run() {
69- Toast.makeText(MikuMikuDroid.this, "Out of Memory. Abort.", Toast.LENGTH_LONG).show();
70- }
71- });
72- }
73- */
7460 MikuMikuDroid.this.runOnUiThread(new Runnable() {
7561 @Override
7662 public void run() {
@@ -123,10 +109,12 @@
123109 mRelativeLayout = new RelativeLayout(this);
124110 mRelativeLayout.setVerticalGravity(Gravity.BOTTOM);
125111 mMMGLSurfaceView = new MMGLSurfaceView(this, mCoreLogic);
112+
126113 LayoutParams p = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
127114 p.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
128115 mSeekBar = new SeekBar(this);
129116 mSeekBar.setLayoutParams(p);
117+ mSeekBar.setId(1024);
130118 mSeekBar.setVisibility(SeekBar.INVISIBLE);
131119 mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
132120 private boolean mIsPlaying = false;
@@ -155,8 +143,47 @@
155143 }
156144
157145 });
146+
147+ p = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
148+ p.addRule(RelativeLayout.CENTER_HORIZONTAL);
149+ p.addRule(RelativeLayout.ABOVE, mSeekBar.getId());
150+ p.setMargins(5, 5, 5, 60);
151+ mPlayPauseButton = new Button(this);
152+ mPlayPauseButton.setLayoutParams(p);
153+ mPlayPauseButton.setVisibility(Button.INVISIBLE);
154+ mPlayPauseButton.setBackgroundResource(R.drawable.ic_media_play);
155+ mPlayPauseButton.setId(mSeekBar.getId() + 1);
156+ mPlayPauseButton.setOnClickListener(new OnClickListener() {
157+ @Override
158+ public void onClick(View v) {
159+ if(mCoreLogic.toggleStartStop()) {
160+ mPlayPauseButton.setBackgroundResource(R.drawable.ic_media_pause);
161+ } else {
162+ mPlayPauseButton.setBackgroundResource(R.drawable.ic_media_play);
163+ }
164+ }
165+ });
166+
167+ p = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
168+ p.addRule(RelativeLayout.ABOVE, mSeekBar.getId());
169+ p.addRule(RelativeLayout.LEFT_OF, mPlayPauseButton.getId());
170+ p.setMargins(5, 5, 60, 60);
171+ mRewindButton = new Button(this);
172+ mRewindButton.setLayoutParams(p);
173+ mRewindButton.setVisibility(Button.INVISIBLE);
174+ mRewindButton.setBackgroundResource(R.drawable.ic_media_previous);
175+ mRewindButton.setOnClickListener(new OnClickListener() {
176+ @Override
177+ public void onClick(View v) {
178+ mCoreLogic.rewind();
179+ }
180+ });
181+
182+
158183 mRelativeLayout.addView(mMMGLSurfaceView);
159184 mRelativeLayout.addView(mSeekBar);
185+ mRelativeLayout.addView(mPlayPauseButton);
186+ mRelativeLayout.addView(mRewindButton);
160187 setContentView(mRelativeLayout);
161188
162189 if (mCoreLogic.checkFileIsPrepared() == false) {
@@ -197,7 +224,7 @@
197224 menu.add(0, Menu.FIRST + 1, Menu.NONE, R.string.menu_load_camera);
198225 menu.add(0, Menu.FIRST + 2, Menu.NONE, R.string.menu_load_music);
199226 menu.add(0, Menu.FIRST + 3, Menu.NONE, R.string.menu_play_pause);
200- menu.add(0, Menu.FIRST + 4, Menu.NONE, R.string.menu_rewind);
227+ menu.add(0, Menu.FIRST + 4, Menu.NONE, R.string.menu_toggle_physics);
201228 menu.add(0, Menu.FIRST + 5, Menu.NONE, R.string.menu_initialize);
202229
203230 return ret;
@@ -360,7 +387,7 @@
360387 break;
361388
362389 case (Menu.FIRST + 4):
363- mCoreLogic.rewind();
390+ mCoreLogic.togglePhysics();
364391 break;
365392
366393 case (Menu.FIRST + 5):
@@ -416,7 +443,15 @@
416443 @Override
417444 public boolean onTouchEvent(MotionEvent event) {
418445 if(event.getAction() == MotionEvent.ACTION_UP) {
446+ if(mCoreLogic.isPlaying()) {
447+ mPlayPauseButton.setBackgroundResource(R.drawable.ic_media_pause);
448+ } else {
449+ mPlayPauseButton.setBackgroundResource(R.drawable.ic_media_play);
450+ }
451+
419452 mSeekBar.setVisibility(mSeekBar.getVisibility() == SeekBar.VISIBLE ? SeekBar.INVISIBLE : SeekBar.VISIBLE);
453+ mPlayPauseButton.setVisibility(mPlayPauseButton.getVisibility() == Button.VISIBLE ? Button.INVISIBLE : Button.VISIBLE);
454+ mRewindButton.setVisibility(mRewindButton.getVisibility() == Button.VISIBLE ? Button.INVISIBLE : Button.VISIBLE);
420455 mRelativeLayout.requestLayout();
421456 }
422457 return false;
--- trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/Miku.java (revision 102)
+++ trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/Miku.java (revision 103)
@@ -106,12 +106,12 @@
106106 }
107107 }
108108
109- public void setBonePosByVMDFramePost() {
109+ public void setBonePosByVMDFramePost(boolean physics) {
110110 ArrayList<Bone> ba = mModel.mBone;
111111 if(ba != null) {
112112 int max = ba.size();
113113
114- if(mIsArm) {
114+ if(mIsArm && physics) {
115115 solvePhysicsPost();
116116 }
117117 for (int r = 0; r < max; r++) {
--- trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/CoreLogic.java (revision 102)
+++ trunk/MikuMikuDroid/src/jp/gauzau/MikuMikuDroid/CoreLogic.java (revision 103)
@@ -46,6 +46,7 @@
4646 private int mWidth;
4747 private int mHeight;
4848 private int mAngle;
49+ private boolean mPhysics = false;
4950
5051 // temporary data
5152 private CameraIndex mCameraIndex = new CameraIndex();
@@ -71,7 +72,7 @@
7172 mMax = 0;
7273 }
7374
74- public void toggleStartStop() {
75+ public boolean toggleStartStop() {
7576 updatePos();
7677 if(mIsPlaying) { // during play
7778 stop();
@@ -78,6 +79,7 @@
7879 } else {
7980 start();
8081 }
82+ return mIsPlaying;
8183 }
8284
8385 public int getCurrentPosition() {
@@ -216,7 +218,7 @@
216218 Miku miku = mMiku.get(mMiku.size() - 1);
217219 miku.attachMotion(motion);
218220 miku.setBonePosByVMDFramePre(0, 0, true);
219- miku.setBonePosByVMDFramePost();
221+ miku.setBonePosByVMDFramePost(mPhysics);
220222 miku.setFaceByVMDFrame(0);
221223
222224 // store IK chache
@@ -270,7 +272,7 @@
270272 Miku miku = new Miku(model);
271273 miku.attachMotion(motion);
272274 miku.setBonePosByVMDFramePre(0, 0, true);
273- miku.setBonePosByVMDFramePost();
275+ miku.setBonePosByVMDFramePost(mPhysics);
274276 miku.setFaceByVMDFrame(0);
275277 miku.addRenderSenario("builtin:default", "screen");
276278 miku.addRenderSenario("builtin:default_alpha", "screen");
@@ -369,6 +371,10 @@
369371 public synchronized void loadCamera(String camera) throws IOException {
370372 mCamera = new MikuMotion(new VMDParser(camera));
371373 }
374+
375+ public synchronized void togglePhysics() {
376+ mPhysics = !mPhysics;
377+ }
372378
373379 native private void btClearAllData();
374380
@@ -441,7 +447,7 @@
441447 }
442448
443449 // exec physics simulation
444- if(isArm() && (step != 0 || !initializePhysics)) {
450+ if(isArm() && mPhysics && (step != 0 || !initializePhysics)) {
445451 btStepSimulation(step, 5);
446452 }
447453
@@ -448,7 +454,7 @@
448454 if (mMiku != null) {
449455 for (Miku miku : mMiku) {
450456 if(miku.hasMotion()) {
451- miku.setBonePosByVMDFramePost();
457+ miku.setBonePosByVMDFramePost(mPhysics);
452458 }
453459 }
454460 }
@@ -476,9 +482,8 @@
476482 return true;
477483 }
478484 } else {
479- mFakeMedia.toggleStartStop();
485+ return mFakeMedia.toggleStartStop();
480486 }
481- return false;
482487 }
483488
484489 public boolean isPlaying() {
--- trunk/MikuMikuDroid/res/values/strings.xml (revision 102)
+++ trunk/MikuMikuDroid/res/values/strings.xml (revision 103)
@@ -16,4 +16,5 @@
1616
1717
1818
19+<string name="menu_toggle_physics">Physics ON/OFF</string>
1920 </resources>
Afficher sur ancien navigateur de dépôt.