package org.ourunix.android;
import org.ourunix.android.jpct.ball.BallCollisionRenderer;
import org.ourunix.android.jpct.particles.ParticlesGLRenderer;
import org.ourunix.android.jpct.solar.SolarRenderer;
import org.ourunix.android.jpctmd2demo.GLRenderer;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
/**
* Wrapper activity demonstrating the use of {@link GLSurfaceView}, a view that
* uses OpenGL drawing into a dedicated surface.
*/
public class GLSurfaceViewActivity extends Activity implements OnTouchListener {
private RenderBase mCurrentRender = null;
//这里设置为public static,是因为在MyRenderer里面用到
public static boolean up = false; // 方向上下左右
public static boolean down = false;
public static boolean left = false;
public static boolean right = false;
public boolean fire = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("","--into GLSurfaceViewActivity---");
Renderer render = null;
Bundle bundle = this.getIntent().getExtras();
int index = bundle.getInt("INDEX");
switch (index) {
default:
case 0: render = new BallCollisionRenderer(this); break;
case 1: render = new ParticlesGLRenderer(this); break;
case 2: render = new GLRenderer(this); break;
case 3: render = new SolarRenderer(this);break;
}
if (render != null) {
mCurrentRender = (RenderBase) render;
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setRenderer(render);
mGLSurfaceView.setOnTouchListener(this);
setContentView(mGLSurfaceView);
String title = bundle.getString("TITLE");
setTitle(title);
}
}
@Override
protected void onResume() {
// Ideally a game should implement onResume() and onPause()
// to take appropriate action when the activity looses focus
super.onResume();
mGLSurfaceView.onResume();
}
@Override
protected void onPause() {
// Ideally a game should implement onResume() and onPause()
// to take appropriate action when the activity looses focus
super.onPause();
mGLSurfaceView.onPause();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (mCurrentRender != null) {
boolean bRet = mCurrentRender.onTouch(v, event);
if (bRet) {
return true;
}
}
return false;
}
private GLSurfaceView mGLSurfaceView;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mCurrentRender != null) {
boolean bRet = mCurrentRender.handleTouchEvent(event);
if (bRet) {
return true;
}
}
return super.onTouchEvent(event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (mCurrentRender != null) {
boolean bRet = mCurrentRender.handleKeyEvent(keyCode, event);
if (bRet) {
// mGLSurfaceView.requestRender();
return true;
}
up = false;
down = false;
left = false;
right = false;
//fire = false;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { // 按键处理,当上下左右中的一个按下时,则将相应的变量置true
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
up = true;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
down = true;
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
left = true;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
right = true;
break;
case KeyEvent.KEYCODE_BACK:
finish();
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
fire = true;
break;
}
return super.onKeyDown(keyCode, event);
}
}