Files
crtr/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.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;
}
}