Ejemplo n.º 1
0
		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 );
			}
		}
Ejemplo n.º 2
0
		private void ItemClick( object sender, EventArgs e )
		{
			if ( !mouseCaptured )
			{
				fromZ = camera.Position.Z;
				from = camera.Rotation;
				from.Normalize();

				SelectItem( (BSPImage)sender );
			}
		}