void RenderEntityOverCursor( Camera camera ) { Vec2 mouse = renderTargetUserControl1.GetFloatMousePosition(); Ray ray = camera.GetCameraToViewportRay( mouse ); MapObject mapObject = null; Map.Instance.GetObjects( ray, delegate( MapObject obj, float scale ) { if( obj is StaticMesh ) return true; mapObject = obj; return false; } ); if( mapObject != null ) { camera.DebugGeometry.Color = new ColorValue( 1, 1, 0 ); camera.DebugGeometry.AddBounds( mapObject.MapBounds ); } }
void RenderEntityOverCursor(Camera camera) { Vec2 mouse = renderTarget.GetFloatMousePosition(); _mouseOver = null; if (mouse.X < 0 || mouse.X > 1 || mouse.Y < 0 || mouse.Y > 1) _worldViewModel.ClearMouseOverEntity(); else { // Find entity under cursor of mouse Ray ray = camera.GetCameraToViewportRay(mouse); Map.Instance.GetObjects(ray, delegate(MapObject obj, float scale) { if (obj.UserData == null || !(obj.UserData is EntityModel)) return true; _mouseOver = obj; return false; }); if (_mouseOver != null) { // Put a yellow box around it and a tooltip camera.DebugGeometry.Color = new ColorValue(1, 1, 0); camera.DebugGeometry.AddBounds(_mouseOver.MapBounds); _worldViewModel.SetMouseOverEntity(((EntityModel)_mouseOver.UserData).Id); } else _worldViewModel.ClearMouseOverEntity(); RayCastResult result = PhysicsWorld.Instance.RayCast(ray, (int)ContactGroup.CastOnlyCollision); _mouseIntersection = result.Position; if (result.Shape != null) { camera.DebugGeometry.Color = new ColorValue(1, 0, 0); camera.DebugGeometry.AddSphere(new Sphere(result.Position, 0.2f)); } } SetToolTipString(); // Show all selected entities with a blue box around them // except MouseOver as it will be yellow camera.DebugGeometry.Color = new ColorValue(0.5f, 0.5f, 1); foreach (MapObject mo in _worldViewModel.SelectedEntities .Select(evm => Entities.Instance.GetByName(evm.Entity.Id.ToString())) .OfType<MapObject>() .Where(mo => mo != _mouseOver)) camera.DebugGeometry.AddBounds(mo.MapBounds); }