Merge pull request #15440 from volzhs/fix-android-touch
Fix Android multi touch
This commit is contained in:
commit
06bb4acae0
@ -828,7 +828,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
|
|||||||
//@Override public boolean dispatchTouchEvent (MotionEvent event) {
|
//@Override public boolean dispatchTouchEvent (MotionEvent event) {
|
||||||
public boolean gotTouchEvent(final MotionEvent event) {
|
public boolean gotTouchEvent(final MotionEvent event) {
|
||||||
|
|
||||||
super.onTouchEvent(event);
|
|
||||||
final int evcount = event.getPointerCount();
|
final int evcount = event.getPointerCount();
|
||||||
if (evcount == 0)
|
if (evcount == 0)
|
||||||
return true;
|
return true;
|
||||||
@ -842,6 +841,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
|
|||||||
arr[i * 3 + 1] = (int)event.getX(i);
|
arr[i * 3 + 1] = (int)event.getX(i);
|
||||||
arr[i * 3 + 2] = (int)event.getY(i);
|
arr[i * 3 + 2] = (int)event.getY(i);
|
||||||
}
|
}
|
||||||
|
final int pointer_idx = event.getPointerId(event.getActionIndex());
|
||||||
|
|
||||||
//System.out.printf("gaction: %d\n",event.getAction());
|
//System.out.printf("gaction: %d\n",event.getAction());
|
||||||
final int action = event.getAction() & MotionEvent.ACTION_MASK;
|
final int action = event.getAction() & MotionEvent.ACTION_MASK;
|
||||||
@ -862,13 +862,10 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
|
|||||||
*/
|
*/
|
||||||
} break;
|
} break;
|
||||||
case MotionEvent.ACTION_POINTER_UP: {
|
case MotionEvent.ACTION_POINTER_UP: {
|
||||||
final int indexPointUp = event.getActionIndex();
|
|
||||||
final int pointer_idx = event.getPointerId(indexPointUp);
|
|
||||||
GodotLib.touch(4, pointer_idx, evcount, arr);
|
GodotLib.touch(4, pointer_idx, evcount, arr);
|
||||||
//System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
|
//System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
|
||||||
} break;
|
} break;
|
||||||
case MotionEvent.ACTION_POINTER_DOWN: {
|
case MotionEvent.ACTION_POINTER_DOWN: {
|
||||||
int pointer_idx = event.getActionIndex();
|
|
||||||
GodotLib.touch(3, pointer_idx, evcount, arr);
|
GodotLib.touch(3, pointer_idx, evcount, arr);
|
||||||
//System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
|
//System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
|
||||||
} break;
|
} break;
|
||||||
|
@ -110,7 +110,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
public boolean onTouchEvent(MotionEvent event) {
|
||||||
|
super.onTouchEvent(event);
|
||||||
return activity.gotTouchEvent(event);
|
return activity.gotTouchEvent(event);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -444,13 +444,12 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos>
|
|||||||
}
|
}
|
||||||
touch.clear();
|
touch.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case 3: { // add tuchi
|
case 3: { // add touch
|
||||||
|
|
||||||
ERR_FAIL_INDEX(p_pointer, p_points.size());
|
for (int i = 0; i < p_points.size(); i++) {
|
||||||
|
if (p_points[i].id == p_pointer) {
|
||||||
TouchPos tp = p_points[p_pointer];
|
TouchPos tp = p_points[i];
|
||||||
touch.push_back(tp);
|
touch.push_back(tp);
|
||||||
|
|
||||||
Ref<InputEventScreenTouch> ev;
|
Ref<InputEventScreenTouch> ev;
|
||||||
@ -461,8 +460,11 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos>
|
|||||||
ev->set_position(tp.pos);
|
ev->set_position(tp.pos);
|
||||||
input->parse_input_event(ev);
|
input->parse_input_event(ev);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
case 4: {
|
case 4: { // remove touch
|
||||||
|
|
||||||
for (int i = 0; i < touch.size(); i++) {
|
for (int i = 0; i < touch.size(); i++) {
|
||||||
if (touch[i].id == p_pointer) {
|
if (touch[i].id == p_pointer) {
|
||||||
@ -474,10 +476,10 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos>
|
|||||||
ev->set_position(touch[i].pos);
|
ev->set_position(touch[i].pos);
|
||||||
input->parse_input_event(ev);
|
input->parse_input_event(ev);
|
||||||
touch.remove(i);
|
touch.remove(i);
|
||||||
i--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user