public void OnMouseDown(object sender, MouseEventArgs e)
        {
            var mouse = new
            {
                Close = Camera.UnProject(new Vector2(e.X, e.Y), -1.0f),
                Far   = Camera.UnProject(new Vector2(e.X, e.Y), 1.0f)
            };

            var callback = new ClosestRayResultCullFaceCallback(mouse.Close, mouse.Far)
            {
                CollisionFilterGroup = CollisionFilterGroups.AllFilter,
                CollisionFilterMask  = CollisionFilterGroups.AllFilter
            };

            CollisionManager.World.RayTest(mouse.Close, mouse.Far, callback);

            if (callback.HasHit)
            {
                var clickableCollisionObject = callback.CollisionObject as IClickable;
                if (clickableCollisionObject != null)
                {
                    RegisterEventHandler(clickableCollisionObject);
                    clickableCollisionObject.OnMouseDown(this,
                                                         new SceneMouseEventArgs(Camera, new Vector2(e.X, e.Y), default(Vector3), e.Button));
                }
                SelectObject(callback.CollisionObject);
            }
            else if (e.Button == MouseButtons.Left)
            {
                SelectObject(null);
            }
        }
Beispiel #2
0
        public SceneMouseEventArgs(Camera camera, Vector2 mouseViewportCoordinates, Vector3 mouseWorldCoordinates,
                                   MouseButtons button)
        {
            // Project the mouse coordinates into world-space at the far z-plane
            var distantWorldPoint = camera.UnProject(mouseViewportCoordinates, 1);

            // Produce a ray originating at the camera and pointing towards the distant world point^
            Camera = camera;
            this.ScreenCoordinates = mouseViewportCoordinates;
            this.MouseRay          = new Ray(camera.Position, distantWorldPoint);
            this.MouseRayFarPoint  = (distantWorldPoint - camera.Position).Length;
            this.Button            = button;
            this.WorldCoordinates  = distantWorldPoint;
        }
        public void OnMouseMove(object sender, MouseEventArgs e)
        {
            var mouse = new
            {
                Close = Camera.UnProject(new Vector2(e.X, e.Y), -1.0f),
                Far   = Camera.UnProject(new Vector2(e.X, e.Y), 1.0f)
            };

            var callback = new ClosestRayResultCallback(mouse.Close, mouse.Far)
            {
                CollisionFilterMask = ( CollisionFilterGroups )CollisionGroup.Objects
            };

            CollisionManager.World.RayTest(mouse.Close, mouse.Far, callback);

            if (callback.HasHit)
            {
                CurrentMouseWorldPosition = callback.HitPointWorld;
                GLDebug.QueuePointDraw(0, CurrentMouseWorldPosition);
            }

            MouseMove?.Invoke(this,
                              new SceneMouseEventArgs(Camera, new Vector2(e.X, e.Y), default(Vector3), e.Button));
        }