private void UpdateLayoutBounds(UpdateDeviceContainerAnimMode mode) { int containersInLayout = 0; _layoutHeight = 0; for (int i = 0; i < _containers.Count; i++) { if (_containers[i].State != ContainerState.Exited && _containers[i].State != ContainerState.Exiting) { containersInLayout++; _layoutHeight = Math.Max(_layoutHeight, _containers[i].DeviceElement.LayoutSize.Y); } } if (_layoutHeight == 0) { _layoutHeight = _defaultDeviceHeight; } _layoutWidth = containersInLayout * _deviceWidth; if (containersInLayout > 1) { _layoutWidth += (containersInLayout - 1) * _deviceSpacing; } _layoutOrigin = new Vector2(-_layoutWidth / 2f, -_layoutHeight / 2f); UpdateCamera(mode); }
private void UpdateDeviceContainers(UpdateDeviceContainerAnimMode mode) { int index = 0; for (int i = 0; i < _containers.Count; i++) { if (_containers[i].State != ContainerState.Exited && _containers[i].State != ContainerState.Exiting) { float containerOffsetY = _layoutHeight - _containers[i].DeviceElement.LayoutSize.Y + _layoutOrigin.Y; _containers[i].OffsetDestination = new Vector3(_layoutOrigin.X + index * (_deviceSpacing + _deviceWidth), containerOffsetY, 0f); index++; if (_disableAnimations || mode == UpdateDeviceContainerAnimMode.None || SnapOffsets(_containers[i].OffsetDestination, _containers[i].DeviceVisual.Offset)) { _containers[i].DeviceVisual.Offset = _containers[i].OffsetDestination; } else { var offsetAnim = Window.Current.Compositor.CreateVector3KeyFrameAnimation(); switch (mode) { case UpdateDeviceContainerAnimMode.Enter: offsetAnim.InsertKeyFrame(1f, _containers[i].OffsetDestination, _introAnimEasing); offsetAnim.Duration = _introAnimDuration; break; case UpdateDeviceContainerAnimMode.Exit: offsetAnim.InsertKeyFrame(1f, _containers[i].OffsetDestination, _outroAnimEasing); offsetAnim.Duration = _outroAnimOffsetDuration; break; default: offsetAnim.InsertKeyFrame(1f, _containers[i].OffsetDestination, _offsetEasing); offsetAnim.Duration = _offsetAnimDuration; break; } _containers[i].DeviceVisual.StartAnimation("Offset", offsetAnim); } } } }
private void UpdateCamera(UpdateDeviceContainerAnimMode mode) { if (_disableAnimations) { _camera.AnimPosition = false; } else { switch (mode) { case UpdateDeviceContainerAnimMode.None: _camera.AnimPosition = false; break; case UpdateDeviceContainerAnimMode.Enter: _camera.AnimPosition = true; _camera.PositionAnimEasing = _introAnimEasing; _camera.PositionAnimDuration = _introAnimDuration; break; case UpdateDeviceContainerAnimMode.Exit: _camera.AnimPosition = true; _camera.PositionAnimEasing = _outroAnimEasing; _camera.PositionAnimDuration = _outroAnimOffsetDuration; break; default: _camera.AnimPosition = true; _camera.PositionAnimEasing = _offsetEasing; _camera.PositionAnimDuration = _offsetAnimDuration; break; } } var ratio = Math.Max(_layoutWidth / _viewWidth, _layoutHeight / _viewHeight); _camera.Position = new Vector3(0f, 0f, ratio * _perspectiveDistance); _camera.ViewportSize = new Vector2(_viewWidth, _viewHeight); }