private void SelectItem( BSPImage image ) { if ( selected == image ) { image.Selected = false; image.RefreshState(); selected = null; to = from; fromZ = camera.Position.Z; toZ = -10; slerp = 1; jumpAngle = 0; } else { if ( selected != null ) { var oldImage = (BSPImage)selected; oldImage.Selected = false; oldImage.RefreshState(); } image.Selected = true; image.Visited = true; image.RefreshState(); selected = image; Point3D center = image.Position; Vector3D dir = (Vector3D)center; dir.Normalize(); Point3D viewpoint = center + ( dir * image.ViewDistance ); var axis = Vector3D.CrossProduct( (Vector3D)camera.Position, (Vector3D)viewpoint ); var angle = Vector3D.AngleBetween( (Vector3D)camera.Position, (Vector3D)viewpoint ); to = ( axis != new Vector3D() ) ? new Quaternion( axis, angle ) : new Quaternion( new Vector3D( 0, 1, 0 ), angle ); to.Normalize(); toZ = -( (Vector3D)viewpoint ).Length; slerp = 1; jumpAngle = Vector3D.AngleBetween( (Vector3D)camera.GetRotationMatrix().Transform( camera.Position ), (Vector3D)viewpoint ); } }
private void ItemClick( object sender, EventArgs e ) { if ( !mouseCaptured ) { fromZ = camera.Position.Z; from = camera.Rotation; from.Normalize(); SelectItem( (BSPImage)sender ); } }