diff --git a/src/alternativa/engine3d/core/View.as b/src/alternativa/engine3d/core/View.as index 8df3705..df99575 100644 --- a/src/alternativa/engine3d/core/View.as +++ b/src/alternativa/engine3d/core/View.as @@ -295,6 +295,10 @@ package alternativa.engine3d.core { // Listeners addEventListener(MouseEvent.MOUSE_DOWN, onMouse); addEventListener(MouseEvent.CLICK, onMouse); + addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, onMouse); + addEventListener(MouseEvent.RIGHT_CLICK, onMouse); + addEventListener(MouseEvent.MIDDLE_MOUSE_DOWN, onMouse); + addEventListener(MouseEvent.MIDDLE_CLICK, onMouse); addEventListener(MouseEvent.DOUBLE_CLICK, onMouse); addEventListener(MouseEvent.MOUSE_MOVE, onMouse); addEventListener(MouseEvent.MOUSE_OVER, onMouse); @@ -619,6 +623,42 @@ package alternativa.engine3d.core { } pressedTarget = null; break; + case "middleMouseDown": + defineTarget(index); + if (target != null) { + propagateEvent(MouseEvent3D.MIDDLE_MOUSE_DOWN, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + } + pressedTarget = target; + break; + case "middleClick": + defineTarget(index); + if (target != null) { + propagateEvent(MouseEvent3D.MIDDLE_MOUSE_UP, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + if (pressedTarget == target) { + clickedTarget = target; + propagateEvent(MouseEvent3D.MIDDLE_CLICK, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + } + } + pressedTarget = null; + break; + case "rightMouseDown": + defineTarget(index); + if (target != null) { + propagateEvent(MouseEvent3D.RIGHT_MOUSE_DOWN, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + } + pressedTarget = target; + break; + case "rightClick": + defineTarget(index); + if (target != null) { + propagateEvent(MouseEvent3D.RIGHT_MOUSE_UP, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + if (pressedTarget == target) { + clickedTarget = target; + propagateEvent(MouseEvent3D.RIGHT_CLICK, mouseEvent, camera, target, targetSurface, branchToVector(target, branch)); + } + } + pressedTarget = null; + break; case "doubleClick": defineTarget(index); if (target != null) { diff --git a/src/alternativa/engine3d/core/events/MouseEvent3D.as b/src/alternativa/engine3d/core/events/MouseEvent3D.as index af5c57a..a4e9364 100644 --- a/src/alternativa/engine3d/core/events/MouseEvent3D.as +++ b/src/alternativa/engine3d/core/events/MouseEvent3D.as @@ -46,6 +46,42 @@ package alternativa.engine3d.core.events { */ public static const MOUSE_UP:String = "mouseUp3D"; + /** + * Defines the value of the type property of a rightClick3D event object. + * @eventType rightClick3D + */ + public static const RIGHT_CLICK:String = "rightClick3D"; + + /** + * Defines the value of the type property of a rightMouseDown3D event object. + * @eventType rightMouseDown3D + */ + public static const RIGHT_MOUSE_DOWN:String = "rightMouseDown3D"; + + /** + * Defines the value of the type property of a rightMouseUp3D event object. + * @eventType rightMouseUp3D + */ + public static const RIGHT_MOUSE_UP:String = "rightMouseUp3D"; + + /** + * Defines the value of the type property of a middleClick3D event object. + * @eventType middleClick3D + */ + public static const MIDDLE_CLICK:String = "middleClick3D"; + + /** + * Defines the value of the type property of a middleMouseDown3D event object. + * @eventType middleMouseDown3D + */ + public static const MIDDLE_MOUSE_DOWN:String = "middleMouseDown3D"; + + /** + * Defines the value of the type property of a middleMouseUp3D event object. + * @eventType middleMouseUp3D + */ + public static const MIDDLE_MOUSE_UP:String = "middleMouseUp3D"; + /** * Defines the value of the type property of a mouseOver3D event object. * @eventType mouseOver3D