public virtual bool OnSceneTouchEvent(/* final */ TouchEvent pSceneTouchEvent) { //* final */ int action = pSceneTouchEvent.GetAction(); MotionEvent action = pSceneTouchEvent.GetMotionEvent(); // final bool isDownAction = action == MotionEvent.ACTION_DOWN; bool isDownAction = (action == (MotionEvent) MotionEvent.ActionPointer1Down); // final float sceneTouchEventX = pSceneTouchEvent.getX(); float sceneTouchEventX = pSceneTouchEvent.X; // final float sceneTouchEventY = pSceneTouchEvent.getY(); float sceneTouchEventY = pSceneTouchEvent.Y; if (this.mTouchAreaBindingEnabled && !isDownAction) { /* final */ SparseArray<ITouchArea> touchAreaBindings = this.mTouchAreaBindings; /* final */ ITouchArea boundTouchArea = touchAreaBindings[pSceneTouchEvent.GetPointerID()]; /* In the case a ITouchArea has been bound to this PointerID, * we'll pass this this TouchEvent to the same ITouchArea. */ if (boundTouchArea != null) { /* Check if boundTouchArea needs to be removed. */ switch (action.Action) { //TODO: this value was MotionEvent.ActionPointer1Up in Java. Is it important to be pointer 1? case MotionEventActions.PointerUp: case MotionEventActions.Cancel: touchAreaBindings.RemoveAt(pSceneTouchEvent.GetPointerID()); break; } /* final */ bool? handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, boundTouchArea); if (handled != null && handled.Value) { return true; } } } /* final */ Scene childScene = this.mChildScene; if (childScene != null) { /* final */ bool handledByChild = this.OnChildSceneTouchEvent(pSceneTouchEvent); if (handledByChild) { return true; } else if (this.mChildSceneModalTouch) { return false; } } /* First give the layers a chance to handle their TouchAreas. */ { /* final */ int layerCount = this.mLayerCount; /* final */ ILayer[] layers = this.mLayers; if (this.mOnAreaTouchTraversalBackToFront) { /* Back to Front. */ for (int i = 0; i < layerCount; i++) { /* final */ ILayer layer = layers[i]; /* final */ //ArrayList<ITouchArea> layerTouchAreas = layer.getTouchAreas(); var layerTouchAreas = layer.GetTouchAreas(); /* final */ int layerTouchAreaCount = layerTouchAreas.Count; if (layerTouchAreaCount > 0) { for (int j = 0; j < layerTouchAreaCount; j++) { /* final */ ITouchArea layerTouchArea = layerTouchAreas[j]; if (layerTouchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool? handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, layerTouchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = layerTouchArea; } return true; } } } } } } else { /* Front to back. */ for (int i = layerCount - 1; i >= 0; i--) { /* final */ ILayer layer = layers[i]; /* final */ //ArrayList<ITouchArea> layerTouchAreas = layer.getTouchAreas(); var layerTouchAreas = layer.GetTouchAreas(); /* final */ int layerTouchAreaCount = layerTouchAreas.Count; if (layerTouchAreaCount > 0) { for (int j = layerTouchAreaCount - 1; j >= 0; j--) { /* final */ ITouchArea layerTouchArea = layerTouchAreas[j]; if (layerTouchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool? handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, layerTouchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = layerTouchArea; } return true; } } } } } } } /* final */ //ArrayList<ITouchArea> touchAreas = this.mTouchAreas; List<ITouchArea> touchAreas = this.mTouchAreas; /* final */ int touchAreaCount = touchAreas.Count; if (touchAreaCount > 0) { if (this.mOnAreaTouchTraversalBackToFront) { /* Back to Front. */ for (int i = 0; i < touchAreaCount; i++) { /* final */ ITouchArea touchArea = touchAreas[i]; if (touchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool? handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, touchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = touchArea; } return true; } } } } else { /* Front to back. */ for (int i = touchAreaCount - 1; i >= 0; i--) { /* final */ ITouchArea touchArea = touchAreas[i]; if (touchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool? handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, touchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = touchArea; } return true; } } } } } /* If no area was touched, the Scene itself was touched as a fallback. */ if (this.mOnSceneTouchListener != null) { return this.mOnSceneTouchListener.OnSceneTouchEvent(this, pSceneTouchEvent); } else { return false; } }
public virtual bool OnSceneTouchEvent(/* final */ TouchEvent pSceneTouchEvent) { //* final */ int action = pSceneTouchEvent.GetAction(); MotionEvent action = pSceneTouchEvent.GetMotionEvent(); // final bool isDownAction = action == MotionEvent.ACTION_DOWN; bool isDownAction = (action == (MotionEvent)MotionEvent.ActionPointer1Down); // final float sceneTouchEventX = pSceneTouchEvent.getX(); float sceneTouchEventX = pSceneTouchEvent.X; // final float sceneTouchEventY = pSceneTouchEvent.getY(); float sceneTouchEventY = pSceneTouchEvent.Y; if (this.mTouchAreaBindingEnabled && !isDownAction) { /* final */ SparseArray <ITouchArea> touchAreaBindings = this.mTouchAreaBindings; /* final */ ITouchArea boundTouchArea = touchAreaBindings[pSceneTouchEvent.GetPointerID()]; /* In the case a ITouchArea has been bound to this PointerID, * we'll pass this this TouchEvent to the same ITouchArea. */ if (boundTouchArea != null) { /* Check if boundTouchArea needs to be removed. */ switch (action.Action) { //TODO: this value was MotionEvent.ActionPointer1Up in Java. Is it important to be pointer 1? case MotionEventActions.PointerUp: case MotionEventActions.Cancel: touchAreaBindings.RemoveAt(pSceneTouchEvent.GetPointerID()); break; } /* final */ bool?handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, boundTouchArea); if (handled != null && handled.Value) { return(true); } } } /* final */ Scene childScene = this.mChildScene; if (childScene != null) { /* final */ bool handledByChild = this.OnChildSceneTouchEvent(pSceneTouchEvent); if (handledByChild) { return(true); } else if (this.mChildSceneModalTouch) { return(false); } } /* First give the layers a chance to handle their TouchAreas. */ { /* final */ int layerCount = this.mLayerCount; /* final */ ILayer[] layers = this.mLayers; if (this.mOnAreaTouchTraversalBackToFront) { /* Back to Front. */ for (int i = 0; i < layerCount; i++) { /* final */ ILayer layer = layers[i]; /* final */ //ArrayList<ITouchArea> layerTouchAreas = layer.getTouchAreas(); var layerTouchAreas = layer.GetTouchAreas(); /* final */ int layerTouchAreaCount = layerTouchAreas.Count; if (layerTouchAreaCount > 0) { for (int j = 0; j < layerTouchAreaCount; j++) { /* final */ ITouchArea layerTouchArea = layerTouchAreas[j]; if (layerTouchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool?handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, layerTouchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = layerTouchArea; } return(true); } } } } } } else { /* Front to back. */ for (int i = layerCount - 1; i >= 0; i--) { /* final */ ILayer layer = layers[i]; /* final */ //ArrayList<ITouchArea> layerTouchAreas = layer.getTouchAreas(); var layerTouchAreas = layer.GetTouchAreas(); /* final */ int layerTouchAreaCount = layerTouchAreas.Count; if (layerTouchAreaCount > 0) { for (int j = layerTouchAreaCount - 1; j >= 0; j--) { /* final */ ITouchArea layerTouchArea = layerTouchAreas[j]; if (layerTouchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool?handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, layerTouchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = layerTouchArea; } return(true); } } } } } } } /* final */ //ArrayList<ITouchArea> touchAreas = this.mTouchAreas; List <ITouchArea> touchAreas = this.mTouchAreas; /* final */ int touchAreaCount = touchAreas.Count; if (touchAreaCount > 0) { if (this.mOnAreaTouchTraversalBackToFront) { /* Back to Front. */ for (int i = 0; i < touchAreaCount; i++) { /* final */ ITouchArea touchArea = touchAreas[i]; if (touchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool?handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, touchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = touchArea; } return(true); } } } } else { /* Front to back. */ for (int i = touchAreaCount - 1; i >= 0; i--) { /* final */ ITouchArea touchArea = touchAreas[i]; if (touchArea.Contains(sceneTouchEventX, sceneTouchEventY)) { /* final */ bool?handled = this.OnAreaTouchEvent(pSceneTouchEvent, sceneTouchEventX, sceneTouchEventY, touchArea); if (handled != null && handled.Value) { /* If binding of ITouchAreas is enabled and this is an ACTION_DOWN event, * bind this ITouchArea to the PointerID. */ if (this.mTouchAreaBindingEnabled && isDownAction) { this.mTouchAreaBindings[pSceneTouchEvent.GetPointerID()] = touchArea; } return(true); } } } } } /* If no area was touched, the Scene itself was touched as a fallback. */ if (this.mOnSceneTouchListener != null) { return(this.mOnSceneTouchListener.OnSceneTouchEvent(this, pSceneTouchEvent)); } else { return(false); } }