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