public void CheckKeyPress(Dictionary<PlayerUtils.Bone, PlayerUtils.BoneData> segments, IKinectSynth kinectSynth) { foreach (var key in keys) { //TODO Add CheckPressed to iKey foreach (var boneData in segments) { if ( boneData.Value.seg.y1 > ((Key)key).Y && boneData.Value.seg.x1 > ((Key)key).X && boneData.Value.seg.x1 < ((Key)key).X + ((Key)key).Width ) { key.IsPressed = true; break; } key.IsPressed = false; } if (key.IsPressed) { kinectSynth.PlayNote(key); } else { kinectSynth.StopNote(key); } } }
public void CheckKeyPress(Dictionary<PlayerUtils.Bone, PlayerUtils.BoneData> segments, IKinectSynth kinectSynth) { var innerR = Math.Pow((diameter / 2) - keyHeight, 2); var outerR = Math.Pow(diameter / 2, 2); foreach (var key in Keys) { foreach (var segment in segments) { var relativeX = centreX - segment.Value.seg.x1; var relativeY = centreY - segment.Value.seg.y1; var checkR = Math.Pow(relativeX, 2) + Math.Pow(relativeY, 2); var theta = Math.Atan2(relativeY, relativeX); if (theta < 0) theta += 2*Math.PI; var angle = theta*(180/Math.PI); if (checkR >= innerR && checkR <= outerR && angle > ((WedgeKey) key).StartAngle && angle < ((WedgeKey) key).StopAngle) { key.IsPressed = true; break; } key.IsPressed = false; } if(key.IsPressed) { kinectSynth.PlayNote(key); } else { kinectSynth.StopNote(key); } } }