in Games/Memory/GamePage.xaml.cs [183:238]
private void OnFlashTimerTick(object sender, object e)
{
_reverseAnimationActive = true;
//Flip button visual
var btn1Visual = ElementCompositionPreview.GetElementVisual(_firstButton);
var btn2Visual = ElementCompositionPreview.GetElementVisual(_secondButton);
var compositor = btn1Visual.Compositor;
//Get a visual for the content
var btn1Content = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(_firstButton, 0), 0);
var btn1ContentVisual = ElementCompositionPreview.GetElementVisual(btn1Content as FrameworkElement);
var btn2Content = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(_secondButton, 0), 0);
var btn2ContentVisual = ElementCompositionPreview.GetElementVisual(btn2Content as FrameworkElement);
var easing = compositor.CreateLinearEasingFunction();
if (_reverseFlipBatchAnimation != null)
{
_reverseFlipBatchAnimation.Completed -= ReverseFlipBatchAnimation_Completed;
_reverseFlipBatchAnimation.Dispose();
}
_reverseFlipBatchAnimation = compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
_reverseFlipBatchAnimation.Completed += ReverseFlipBatchAnimation_Completed;
ScalarKeyFrameAnimation flipAnimation = compositor.CreateScalarKeyFrameAnimation();
flipAnimation.InsertKeyFrame(0.000001f, 0);
flipAnimation.InsertKeyFrame(0.999999f, -180, easing);
flipAnimation.InsertKeyFrame(1f, 0);
flipAnimation.Duration = TimeSpan.FromMilliseconds(400);
flipAnimation.IterationBehavior = AnimationIterationBehavior.Count;
flipAnimation.IterationCount = 1;
btn1Visual.CenterPoint = new Vector3((float)(0.5 * _firstButton.ActualWidth), (float)(0.5f * _firstButton.ActualHeight), 0f);
btn1Visual.RotationAxis = new Vector3(0.0f, 1f, 0f);
btn2Visual.CenterPoint = new Vector3((float)(0.5 * _secondButton.ActualWidth), (float)(0.5f * _secondButton.ActualHeight), 0f);
btn2Visual.RotationAxis = new Vector3(0.0f, 1f, 0f);
ScalarKeyFrameAnimation appearAnimation = compositor.CreateScalarKeyFrameAnimation();
appearAnimation.InsertKeyFrame(0.0f, 1);
appearAnimation.InsertKeyFrame(0.399999f, 1);
appearAnimation.InsertKeyFrame(0.4f, 0);
appearAnimation.InsertKeyFrame(1f, 0);
appearAnimation.Duration = TimeSpan.FromMilliseconds(400);
appearAnimation.IterationBehavior = AnimationIterationBehavior.Count;
appearAnimation.IterationCount = 1;
btn1Visual.StartAnimation(nameof(btn1Visual.RotationAngleInDegrees), flipAnimation);
btn2Visual.StartAnimation(nameof(btn2Visual.RotationAngleInDegrees), flipAnimation);
btn1ContentVisual.StartAnimation(nameof(btn1ContentVisual.Opacity), appearAnimation);
btn2ContentVisual.StartAnimation(nameof(btn2ContentVisual.Opacity), appearAnimation);
_reverseFlipBatchAnimation.End();
_flashTimer.Stop();
GazeInput.SetInteraction(buttonMatrix, Interaction.Enabled);
}