/// <summary>
/// Event handler for Kinect sensor's SkeletonFrameReady event
/// </summary>
/// <param name="sender">object sending the event</param>
/// <param name="e">event arguments</param>
private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
Skeleton[] skeletons = new Skeleton[0];
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
using (DrawingContext dc = this.drawingGroup.Open())
{
// Draw a transparent background to set the render size
dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));
if (skeletons.Count(t => t.TrackingState == SkeletonTrackingState.Tracked) >= 1)
{
Skeleton player1 = skeletons.First(p => p.TrackingState == SkeletonTrackingState.Tracked);
Skeleton player2 = skeletons.Last(p => p.TrackingState == SkeletonTrackingState.Tracked);
//Console.WriteLine(player1.Position.Z.ToString());
paddleLeft.MoveTo((RenderHeight / 2 - paddleLeft.h / 2) + (player1.Position.Z - 2) * 500);
paddleRight.MoveTo((RenderHeight / 2 - paddleRight.h / 2) + (player2.Position.Z - 2) * 500); //TODO change to player2
}
paddleLeft.Draw(dc);
paddleRight.Draw(dc);
ball.Draw(dc);
ball.Move();
ball.DetectCollision(paddleLeft, paddleRight);
if (ball.HitRight())
{
scoreLeft++;
this.ScoreLeft.Text = scoreLeft.ToString();
ball.Spawn();
}
if (ball.HitLeft())
{
scoreRight++;
this.ScoreRight.Text = scoreRight.ToString();
ball.Spawn();
}
if (showSkeletons)
{
foreach (Skeleton skel in skeletons)
{
//RenderClippedEdges(skel, dc);
if (skel.TrackingState == SkeletonTrackingState.Tracked)
{
this.DrawBonesAndJoints(skel, dc);
}
else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
{
dc.DrawEllipse(
this.centerPointBrush,
null,
this.SkeletonPointToScreen(skel.Position),
BodyCenterThickness,
BodyCenterThickness);
}
}
}
// prevent drawing outside of our render area
this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
}
}