12b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpackage com.replica.replicaisland;
22b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
32b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpublic class InputTouchScreen extends BaseObject {
42b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
52b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private int MAX_TOUCH_POINTS = 5;
62b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private InputXY mTouchPoints[];
72b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
82b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public InputTouchScreen() {
92b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		mTouchPoints = new InputXY[MAX_TOUCH_POINTS];
102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		for (int x = 0; x < MAX_TOUCH_POINTS; x++) {
112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[x] = new InputXY();
122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	@Override
162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public void reset() {
172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		for (int x = 0; x < MAX_TOUCH_POINTS; x++) {
182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[x].reset();
192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final void press(int index, float currentTime, float x, float y) {
232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		assert (index >= 0 && index < MAX_TOUCH_POINTS);
242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[index].press(currentTime, x, y);
262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final void release(int index) {
302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[index].release();
322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public void resetAll() {
362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		for (int x = 0; x < MAX_TOUCH_POINTS; x++) {
372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[x].reset();
382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public boolean getTriggered(int index, float time) {
422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		boolean triggered = false;
432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			triggered = mTouchPoints[index].getTriggered(time);
452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return triggered;
472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public boolean getPressed(int index) {
502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		boolean pressed = false;
512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			pressed = mTouchPoints[index].getPressed();
532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return pressed;
552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final void setVector(int index, Vector2 vector) {
582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			mTouchPoints[index].setVector(vector);
602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final float getX(int index) {
642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		float magnitude = 0.0f;
652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			magnitude = mTouchPoints[index].getX();
672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return magnitude;
692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final float getY(int index) {
722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		float magnitude = 0.0f;
732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			magnitude = mTouchPoints[index].getY();
752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return magnitude;
772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public final float getLastPressedTime(int index) {
802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		float time = 0.0f;
812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		if (index < MAX_TOUCH_POINTS) {
822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			time = mTouchPoints[index].getLastPressedTime();
832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return time;
852b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public InputXY findPointerInRegion(float regionX, float regionY, float regionWidth, float regionHeight) {
882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		InputXY touch = null;
892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		for (int x = 0; x < MAX_TOUCH_POINTS; x++) {
902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			final InputXY pointer = mTouchPoints[x];
912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			if (pointer.getPressed() &&
922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm					getTouchedWithinRegion(pointer.getX(), pointer.getY(), regionX, regionY, regionWidth, regionHeight)) {
932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm				touch = pointer;
942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm				break;
952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			}
962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return touch;
982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private final boolean getTouchedWithinRegion(float x, float y, float regionX, float regionY, float regionWidth, float regionHeight) {
1012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		 return (x >= regionX &&
1022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm				 y >= regionY &&
1032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm				 x <= regionX + regionWidth &&
1042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm				 y <= regionY + regionHeight);
1052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
1062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	public boolean getTriggered(float gameTime) {
1082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		boolean triggered = false;
1092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		for (int x = 0; x < MAX_TOUCH_POINTS && !triggered; x++) {
1102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm			triggered = mTouchPoints[x].getTriggered(gameTime);
1112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		}
1122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm		return triggered;
1132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
1142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm}
116