Beispiel #1
0
        /// <summary>
        /// Set the current spotlight animation transition.
        /// Make sure when calling this that it is in an appropriate context and will not cause a jarring reset on animated transition change.
        /// </summary>
        /// <param name="transition">Enumerated value denoting what transition to perform.</param>
        public static void ExecuteViewMotionTransition(SpotlightMotionTransition transition, Vector2 modification)
        {
            currentSpotlightAnimatedTransition = transition;

            // Perform Conditional Transition Setup
            switch (transition)
            {
                case SpotlightMotionTransition.WorldViewToPlayer:
                    offset = modification;
                    zoom = minZoom;
                    EnforceZoomLimits();
                    EnforceStageBoundaries();
                    // redundancy protection
                    SavedDataIsValid = false;
                    ViewMotionTransitionZoomingIn = false;
                    if (currentFocusTarget != null)
                        ViewMotionInformationVector = currentFocusTarget.Position();
                    break;

                case SpotlightMotionTransition.FlickToScroll:
                    modification.Normalize();
                    modification *= (400 / zoom);
                    ViewMotionInformationVector = offset - modification;
                    break;

                case SpotlightMotionTransition.FullZoomAroundPoint:
                    ViewMotionTransitionZoomingIn = (zoom > (minZoom + maxZoom) / 2);
                    int numSteps = (int)((ViewMotionTransitionZoomingIn) ? (zoom - maxZoom) / ZoomStep : (minZoom - zoom) / ZoomStep);
                    Vector2 center = offset + new Vector2(halfScreenWidth, halfScreenHeight);
                    ViewMotionInformationVector = (TranslateScreenVectorToWorldVector(modification) - center) / numSteps;
                    break;
                default:
                    break;
            }
        }
Beispiel #2
0
        public static void TemporaryZoomOnObject(WorldObject newFocus, Vector2 fingerLocation)
        {
            if (zoom < 1.3f)
            {
                savedZoom = zoom;
                minZoom = 1.3f;
                zoom = 1.3f;
                savedFocusTarget = currentFocusTarget;
                currentFocusTarget = newFocus;
                Point bounds = newFocus.Center();
                offset = new Vector2(bounds.X - (fingerLocation.X/zoom), bounds.Y - (fingerLocation.Y/zoom));
                currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;

            }
            else
            {
                if (fingerLocation.X < 50)
                {
                    offset.X -= 15;
                }
                if (fingerLocation.X > 750)
                {
                    offset.X += 15;
                }
                if (fingerLocation.Y < 50)
                {
                    offset.Y -= 15;
                }
                if (fingerLocation.Y > 430)
                {
                    offset.Y += 15;
                }
                EnforceStageBoundaries();
            }
        }
Beispiel #3
0
        /// <summary>
        /// Update the SpotlightMotionTransition if one is active
        /// </summary>
        private static void UpdateSpotlightMotionTransition()
        {
            switch (currentSpotlightAnimatedTransition)
            {
                case SpotlightMotionTransition.None:
                    return;
                case SpotlightMotionTransition.WorldViewToPlayer:
                    miniAdjustStageZoomLevel(!ViewMotionTransitionZoomingIn);
                    offset = Vector2.Lerp(offset, ViewMotionInformationVector, 0.5f);
                    if (zoom <= maxZoom) ViewMotionTransitionZoomingIn = true;
                    if (zoom >= minZoom) currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;
                    break;
                case SpotlightMotionTransition.FlickToScroll:
                    offset = Vector2.Lerp(offset, ViewMotionInformationVector, 0.1f);
                    if (Vector2.Distance(offset, ViewMotionInformationVector) < 5.0f)
                        currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;
                    break;

                case SpotlightMotionTransition.FullZoomAroundPoint:
                    AdjustStageZoomLevel(ViewMotionTransitionZoomingIn);
                    offset += ViewMotionInformationVector;
                    if (zoom == maxZoom || zoom == minZoom) currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;
                    break;
                default:
                    break;
            }
        }
Beispiel #4
0
 /// <summary>
 /// Process a gesture sample. 
 /// </summary>
 /// <param name="gesture"></param>
 public static void ProcessTouch(GestureSample gesture)
 {
     switch (gesture.GestureType)
     {
         case GestureType.Pinch:
             float deltaSpace = Vector2.Distance(gesture.Position, gesture.Position2);
             if (lastDeltaSpace != 0)
             {
                 if (lastDeltaSpace == deltaSpace) return;
                 AdjustStageZoomLevel(lastDeltaSpace > deltaSpace);
             }
             lastDeltaSpace = deltaSpace;
             break;
         case GestureType.FreeDrag:
             offset -= gesture.Delta;
             EnforceStageBoundaries();
             currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;
             break;
         case GestureType.Tap:
             currentSpotlightAnimatedTransition = SpotlightMotionTransition.None;
             break;
         case GestureType.Flick:
             ExecuteViewMotionTransition(SpotlightMotionTransition.FlickToScroll, gesture.Delta);
             break;
         case GestureType.DoubleTap:
             ExecuteViewMotionTransition(SpotlightMotionTransition.FullZoomAroundPoint, gesture.Position);
             break;
         default:
             break;
     }
 }