package jp.ac.titech.sharp4k.cuten.sampletask;
+import java.util.Timer;
+import java.util.TimerTask;
import jp.ac.titech.sharp4k.cuten.BaseApp;
import jp.ac.titech.sharp4k.cuten.R;
import jp.ac.titech.sharp4k.cuten.sampletask.polychoron.ScreenInfo;
import android.content.Context;
import android.content.res.Resources;
+import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
-import android.widget.RelativeLayout;
import android.widget.TextView;
public class PolychoronTask extends BaseApp {
private GameSurfaceView view;
private GameRender renderer;
private PolychoronObj obj;
- enum Problem{VERTEX_NUMBER,EDGE_NUMBER,PLANE_NUMBER};
- private static final Problem prob=Problem.VERTEX_NUMBER;//問題種類指定
+
+ enum Problem {
+ VERTEX_NUMBER, EDGE_NUMBER, PLANE_NUMBER
+ };
+
+ private static final Problem prob = Problem.VERTEX_NUMBER;// 問題種類指定
RadioGroup radioGroupChoice;
+ Handler handler = new Handler();
+ Timer timer;
+
@Override
protected View createView(Context ctx, Resources res) {
this.ctx = ctx;
ScreenInfo screen = new ScreenInfo();
renderer = new GameRender(view, screen, obj);
renderer.resouce = res;
- //ビット深度(RGB=5,6,5),ステンシルバッファ1
- //デバイスにより異なる可能性あり
+ // ビット深度(RGB=5,6,5),ステンシルバッファ1
+ // デバイスにより異なる可能性あり
view.setEGLConfigChooser(5, 6, 5, 0, 0, 1);
view.setRenderer(renderer);
//
String question;
- switch(prob){
+ switch (prob) {
case VERTEX_NUMBER:
question = res.getString(R.string.first_vertex);
break;
question = res.getString(R.string.first_plane);
break;
default:
- question="";
- Log.d(TAG,"no question error");
+ question = "";
+ Log.d(TAG, "no question error");
}
TextView text = new TextView(ctx);
text.setText(question);
questionArea.addView(text);
-
+
radioGroupChoice = new RadioGroup(ctx);
radioGroupChoice.setOrientation(LinearLayout.HORIZONTAL);
- int[] choice=res.getIntArray(R.array.octa_v_choice);
+ int[] choice = res.getIntArray(R.array.octa_v_choice);
for (int i = 0; i < choice.length; i++) {
RadioButton btn = new RadioButton(ctx);
btn.setText(String.valueOf(choice[i]));
questionArea.addView(radioGroupChoice);
body.addView(questionArea);
body.addView(view);
+ //
+ TimerTask task = new TimerTask() {
+ @Override
+ public void run() {
+ handler.post(new Runnable() {
+ public void run() {
+ renderer.update();
+ }
+ });
+ }
+ };
+ timer = new Timer(true);
+ timer.schedule(task, 0, 16);//~60fps
return body;
}
@Override
protected void onClose() {
- int n=radioGroupChoice.getCheckedRadioButtonId();
+ timer.cancel();
+ int n = radioGroupChoice.getCheckedRadioButtonId();
int ans;
- switch(prob){
+ switch (prob) {
case VERTEX_NUMBER:
ans = obj.getVertexNum();
break;
ans = obj.getPlaneNum();
break;
default:
- ans=0;
- Log.d(TAG,"no answer error");
+ ans = 0;
+ Log.d(TAG, "no answer error");
}
- int res=(ans==n)?100:0;
+ int res = (ans == n) ? 100 : 0;
int[] result = { res };
sendResult(result);
super.onClose();
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
+import java.util.concurrent.TimeUnit;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
float[] tempVec = new float[3];
float[] axisA = new float[3];
float[] axisB = new float[3];
-
+
+ public void update() {
+ // 表示位置決定
+ obj.nextStep();
+ }
@Override
// ここで描画
public void onDrawFrame(GL10 gl) {
// 画像の透過の有効化
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
GLES20.glEnable(GLES20.GL_BLEND);
- // 表示位置決定
Matrix.setIdentityM(modelMatrix, 0);
Matrix.rotateM(modelMatrix, 0, 0.2f, 0, 1, 0);
obj.update();
obj.sort();
+
// 辺
for (int i = 0; i < obj.getEdgeNum() / 2; i++) {
obj.getEdge(drawEdge, i);
//
lineBuffer = makeFloatBuffer(ballPosition);
elPositionBuffer = makeFloatBuffer(elPosition);
+ //
+
}
// フロートの配列からフロートバッファを返す
// 回転動作中の回転行列
private float[] rm = new float[16];
private float scalingSensitivity=5.0f;
+ public float rotSpeed=0.002f;
public ModelController(Context context, PolychoronObj o) {
obj = o;
@Override
public boolean onSingleTapUp(MotionEvent e) {
- // TODO Auto-generated method stub
+ if (mode==ModeD4.STOP) {
+ PolychoronVertex.rotateUX(rot,rotSpeed);
+ obj.transpose4u(rot);
+ mode = ModeD4.ZU;
+ obj.transpose4u(rot);
+ }else{
+ obj.transpose4u(uniM);
+ mode = ModeD4.STOP;
+ }
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
- switch (mode) {
- case STOP:
- PolychoronVertex.rotateUX(rot,0.05f);
- obj.transpose4u(rot);
- mode = ModeD4.XU;
- case XU:
- PolychoronVertex.rotateUY(rot,0.05f);
- obj.transpose4u(rot);
- mode = ModeD4.YU;
- break;
- case YU:
- PolychoronVertex.rotateUZ(rot,0.05f);
- obj.transpose4u(rot);
- mode = ModeD4.ZU;
- break;
- case ZU:
- obj.transpose4u(uniM);
- mode = ModeD4.STOP;
- break;
- }
- obj.transpose4u(rot);
return false;
}