50 lines
1.3 KiB
Java
50 lines
1.3 KiB
Java
package world.cryville.input.unity.android;
|
|
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import com.unity3d.player.UnityPlayer;
|
|
import java.lang.reflect.Field;
|
|
import world.cryville.input.unity.android.Proxy;
|
|
|
|
public final class TouchProxy extends Proxy implements View.OnTouchListener {
|
|
public TouchProxy() throws NoSuchFieldException, IllegalAccessException, SecurityException {
|
|
Field playerField = activity.getClass().getDeclaredField("mUnityPlayer");
|
|
playerField.setAccessible(true);
|
|
UnityPlayer player = (UnityPlayer)playerField.get(activity);
|
|
player.setOnTouchListener(this);
|
|
}
|
|
|
|
boolean activated;
|
|
|
|
@Override
|
|
public void activate() {
|
|
activated = true;
|
|
}
|
|
|
|
@Override
|
|
public void deactivate() {
|
|
activated = false;
|
|
}
|
|
|
|
@Override
|
|
public boolean onTouch(View v, MotionEvent event) {
|
|
if (!activated) return false;
|
|
int pointerCount = event.getPointerCount();
|
|
int action = event.getActionMasked();
|
|
int actionIndex = event.getActionIndex();
|
|
long time = event.getEventTime();
|
|
for (int i = 0; i < pointerCount; i++) {
|
|
int id = event.getPointerId(i);
|
|
float x = event.getX(i);
|
|
float y = event.getY(i);
|
|
if (action == 5 || action == 6) {
|
|
feed(id, i == actionIndex ? action : -1, time, x, y);
|
|
}
|
|
else {
|
|
feed(id, action, time, x, y);
|
|
}
|
|
}
|
|
feed(0, -2, time);
|
|
return false;
|
|
}
|
|
} |