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
