Move part of the input module to Cryville.Input.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user