3 import javax.microedition.khronos.opengles.GL10;
\r
5 import android.os.Bundle;
\r
6 import android.view.MotionEvent;
\r
8 import com.jm.db.Dao;
\r
9 import com.jm.opengl.JuggleDrawer;
\r
10 import com.jm.opengl.OpenGLActivityBase;
\r
11 import com.jm.utility.JmException;
\r
12 import com.jm.utility.Resource;
\r
14 public class JuggleView extends OpenGLActivityBase {
\r
15 private static final float FPS_NUM = 0.0f;
\r
16 private static JuggleDrawer drawer = null;
\r
18 private int tx = -1;
\r
19 private int ty = -1;
\r
20 private int rr = -1;
\r
22 public static void init(){
\r
26 public JuggleView() {
\r
27 super(FPS_NUM + Resource.speed * 3, true);
\r
31 public void onCreate(Bundle savedInstanceState) {
\r
32 super.onCreate(savedInstanceState);
\r
33 //setContentView(R.layout.juggleview);
\r
36 protected void update(){
\r
37 if (drawer == null){
\r
43 protected void draw(GL10 gl){
\r
44 if (drawer == null){
\r
51 public void onSurfaceChanged(GL10 gl, int width, int height) {
\r
52 super.onSurfaceChanged(gl, width, height);
\r
54 if (drawer != null){
\r
58 Bundle extras = getIntent().getExtras();
\r
60 JmPattern jp = null;
\r
61 int id = extras.getInt("ID");
\r
63 JmPattern[] list = Dao.getInstance().getFromId(id);
\r
64 if (list.length <= 0) {
\r
65 throw new JmException();
\r
69 jp = (JmPattern) extras.getSerializable("PATTERN");
\r
72 drawer = new JuggleDrawer(this, jp);
\r
74 } catch (JmException e) {
\r
75 showDialog(this, e);
\r
76 } catch (Exception e) {
\r
77 showDialog(this, e);
\r
82 public boolean onTouchEvent(MotionEvent event) {
\r
83 if (drawer == null){
\r
86 int type = event.getAction();
\r
87 int count = event.getPointerCount();
\r
90 case MotionEvent.ACTION_DOWN:
\r
95 case MotionEvent.ACTION_MOVE:
\r
96 int history = event.getHistorySize() / count;
\r
98 for (int i = 0; i < history; i++){
\r
99 int index1 = event.findPointerIndex(0);
\r
100 int index2 = event.findPointerIndex(1);
\r
102 if (index1 >= 0 && index2 >= 0){
\r
103 int ux1 = (int) event.getHistoricalX(index1, i);
\r
104 int uy1 = (int) event.getHistoricalY(index1, i);
\r
105 int ux2 = (int) event.getHistoricalX(index2, i);
\r
106 int uy2 = (int) event.getHistoricalY(index2, i);
\r
107 int ss = (ux1 - ux2) * (ux1 - ux2) + (uy1 - uy2) * (uy1 - uy2);
\r
109 float drr = rotateR(rr, ss);
\r
111 drawer.rotate(0, 0, drr);
\r
116 else if (index1 >= 0 || index2 >= 0){
\r
125 int ux = (int) event.getHistoricalX(index, i);
\r
126 int uy = (int) event.getHistoricalY(index, i);
\r
128 float rx = rotateXY(tx, ux);
\r
129 float ry = rotateXY(ty, uy);
\r
130 if (rx != 0 || ry != 0) {
\r
131 drawer.rotate(rx, ry, 0);
\r
139 int index1 = event.findPointerIndex(0);
\r
140 int index2 = event.findPointerIndex(1);
\r
141 if (index1 >= 0 && index2 >= 0){
\r
142 int ux1 = (int) event.getX(index1);
\r
143 int uy1 = (int) event.getY(index1);
\r
144 int ux2 = (int) event.getX(index2);
\r
145 int uy2 = (int) event.getY(index2);
\r
146 int ss = (ux1 - ux2) * (ux1 - ux2) + (uy1 - uy2) * (uy1 - uy2);
\r
148 float drr = rotateR(rr, ss);
\r
150 drawer.rotate(0, 0, drr);
\r
155 else if (index1 >= 0 || index2 >= 0){
\r
164 int ux = (int) event.getX(index);
\r
165 int uy = (int) event.getY(index);
\r
167 float rx = rotateXY(tx, ux);
\r
168 float ry = rotateXY(ty, uy);
\r
169 if (rx != 0 || ry != 0) {
\r
170 drawer.rotate(rx, ry, 0);
\r
183 private float rotateXY(int src, int dst){
\r
187 else if (src < dst){
\r
195 private float rotateR(int src, int dst){
\r
199 else if (src < dst){
\r