Hurray, now I feel like I contributed :)

On Apr 15, 1:39 pm, David Lenaerts <[email protected]> wrote:
> Thanks both! This issue should now be fixed in the current revision :)
>
>
>
> On Thu, Apr 14, 2011 at 7:39 PM, Snownova <[email protected]> wrote:
> > I beat you to it ;)
>
> >http://groups.google.com/group/away3d-dev/browse_thread/thread/9989b8...
>
> > On Apr 14, 10:11 am, ragaes <[email protected]> wrote:
> > > Hello,
>
> > > This post is for sharing a patch to fix the Mouse3DManager class in
> > > Broomstick.
>
> > > Solves wrong mouse hit test when View3D not covering the whole stage.
>
> > > It also checks if within view bounds before performing the hit test.
>
> > > Index: src/away3d/core/managers/Mouse3DManager.as
> > > ===============================================
>
> > > --- src/away3d/core/managers/Mouse3DManager.as  (revision 3149)
> > > +++ src/away3d/core/managers/Mouse3DManager.as  (working copy)
> > > @@ -6,11 +6,12 @@
> > >         import away3d.core.base.Object3D;
> > >         import away3d.core.render.HitTestRenderer;
> > >         import away3d.core.traverse.EntityCollector;
> > > +       import away3d.entities.Entity;
> > >         import away3d.events.MouseEvent3D;
> > > -       import away3d.entities.Entity;
> > > -
> > > +
> > >         import flash.display.Stage;
> > >         import flash.events.MouseEvent;
> > > +       import flash.geom.Rectangle;
> > >         import flash.geom.Vector3D;
>
> > >         use namespace arcane;
> > > @@ -28,6 +29,7 @@
> > >                 private var _activeRenderable : IRenderable;
>
> > >                 private var _stage : Stage;
> > > +
> > >                 private var _hitTestRenderer : HitTestRenderer;
> > >                 private var _view : View3D;
>
> > > @@ -51,6 +53,7 @@
> > >                 {
> > >                         _view = view;
> > >                         _stage = view.stage;
> > > +
> > >                         _hitTestRenderer = hitTestRenderer;
>
> > >                         // to do: add invisible container?
> > > @@ -80,6 +83,9 @@
> > >                  */
> > >                 private function onClick(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         // todo: implement invalidation and only rerender
> > if view is
> > > invalid?
> > >                         getObjectHitData();
> > >                         if (_activeRenderable) dispatch(_mouseClick,
> > event,
> > > _activeRenderable);
> > > @@ -90,6 +96,9 @@
> > >                  */
> > >                 private function onDoubleClick(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         getObjectHitData();
> > >                         if (_activeRenderable)
> > dispatch(_mouseDoubleClick, event,
> > > _activeRenderable);
> > >                 }
> > > @@ -99,6 +108,9 @@
> > >                  */
> > >                 private function onMouseDown(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         getObjectHitData();
> > >                         if (_activeRenderable) dispatch(_mouseDown,
> > event,
> > > _activeRenderable);
> > >                 }
> > > @@ -108,6 +120,9 @@
> > >                  */
> > >                 private function onMouseMove(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         getObjectHitData();
>
> > >                         if (_activeObject == _previousActiveObject) {
> > > @@ -124,6 +139,9 @@
> > >                  */
> > >                 private function onMouseUp(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         getObjectHitData();
> > >                         dispatch(_mouseUp, event, _activeRenderable);
> > >                 }
> > > @@ -133,6 +151,9 @@
> > >                  */
> > >                 private function onMouseWheel(event : MouseEvent) : void
> > >                 {
> > > +                       var r : Rectangle = new Rectangle(0, 0,
> > _view.width,
> > > _view.height);
> > > +                       if(!r.contains(_view.mouseX, _view.mouseY))
> > return;
> > > +
> > >                         getObjectHitData();
> > >                         if (_activeRenderable) dispatch(_mouseWheel,
> > event,
> > > _activeRenderable);
> > >                 }
> > > @@ -150,7 +171,7 @@
> > >                         // todo: would it be faster to run a custom
> > ray-intersect
> > > collector instead of using entity collector's data?
> > >                         // todo: shouldn't render it every time, only
> > when invalidated (on
> > > move or view render)
> > >                         if (collector.numMouseEnableds > 0) {
> > > -
> > _hitTestRenderer.update(_stage.mouseX/_stage.stageWidth,
> > > _stage.mouseY/_stage.stageHeight, collector);
> > > +
> > _hitTestRenderer.update(_view.mouseX/_view.width, _view.mouseY/
> > > _view.height, collector);
> > >                                 _activeRenderable =
> > _hitTestRenderer.hitRenderable;
> > >                                 _activeObject = (_activeRenderable &&
> > > _activeRenderable.mouseEnabled)? _activeRenderable.sourceEntity :
> > > null;
> > >                         }
>
> --
> David Lenaerts
> Flash platform developerhttp://www.derschmale.com

Reply via email to