public SlidingPosition( BadgeCaps device, MessageQueueItem item, SlidingDirection direction, Easing ease, float speed, float padding) { Item = item; Direction = direction; Ease = ease; Speed = speed; Padding = padding; if (IsVertical) { m_distance = Item.Element.ClipHeight - device.Height; } else { m_distance = Item.Element.ClipWidth - device.Width; } m_distance += 2 * Padding; m_startOffset = Padding; m_currOffset = 0; m_totalDuration = m_distance / Speed; }
public SlidingTransition( BadgeCaps device, MessageQueueItem item1, MessageQueueItem item2, SlidingDirection direction, Easing ease, float speed, float?padding) { Item1 = item1; Item2 = item2; Direction = direction; Ease = ease; Speed = speed; if (IsVertical) { Padding = padding.HasValue ? padding.Value : device.Height; m_startOffset = Item1.Element.RenderY; m_distance = AnimHelper.Round(Item1.Element.ClipHeight + m_startOffset + Padding); } else { Padding = padding.HasValue ? padding.Value : device.Width; m_startOffset = Item1.Element.RenderX; m_distance = AnimHelper.Round(Item1.Element.ClipWidth + m_startOffset + Padding); } m_currOffset = m_startOffset; m_totalDuration = m_distance / Speed; }
// returns row, col of position above the given one, in the given direction public Vector2 getPositionAbove(int row, int col, SlidingDirection direction) { int candidateRow, candidateCol; if (getDirection(row, col) == TriangleDirection.Upward) // if triangle is "pointing" upward // "above" now means to the right or left, in the same row { candidateRow = row; switch (BattleInfo.slidingDirection) { case SlidingDirection.Left: candidateCol = col - 1; break; case SlidingDirection.Right: candidateCol = col + 1; break; default: candidateCol = -1; break; } if (!isEmptyPosition(candidateRow, candidateCol)) { return(new Vector2(candidateRow, candidateCol)); } else { return(new Vector2(-1, -1)); // indicate no piece above } } else // triangle is "pointing" downward // "above" now means directly above; doesn't depend on sliding direction { candidateRow = row - 1; candidateCol = col; if (!isEmptyPosition(candidateRow, candidateCol)) { return(new Vector2(candidateRow, candidateCol)); } else { return(new Vector2(-1, -1)); // indicate no piece above } } }
public SlidingTransition( MessageQueueItem item1, MessageQueueItem item2, SlidingDirection direction, Easing ease, float speed, float? padding) { Item1 = item1; Item2 = item2; Direction = direction; Ease = ease; Speed = speed; if(IsVertical) { Padding = padding.HasValue ? padding.Value : BadgeCaps.Height; m_startOffset = Item1.Element.RenderY; m_distance = AnimHelper.Round(Item1.Element.ClipHeight + m_startOffset + Padding); } else { Padding = padding.HasValue ? padding.Value : BadgeCaps.Width; m_startOffset = Item1.Element.RenderX; m_distance = AnimHelper.Round(Item1.Element.ClipWidth + m_startOffset + Padding); } m_currOffset = m_startOffset; m_totalDuration = m_distance / Speed; }
public SlidingPosition( MessageQueueItem item, SlidingDirection direction, Easing ease, float speed, float padding) { Item = item; Direction = direction; Ease = ease; Speed = speed; Padding = padding; if(IsVertical) { m_distance = Item.Element.ClipHeight - BadgeCaps.Height; } else { m_distance = Item.Element.ClipWidth - BadgeCaps.Width; } m_distance += 2 * Padding; m_startOffset = Padding; m_currOffset = 0; m_totalDuration = m_distance / Speed; }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (InputHandler != null) { #if WINDOWS || XBOX360 var mouseState = Mouse.GetState(); var mousePosition = new Vector2(mouseState.X, mouseState.Y); if (mouseState.LeftButton == ButtonState.Pressed && !isSliding) { if (currentDragDistance >= requiredDragDistance) { // figure out which way they are dragging if (previousMouseDownPosition.X > mouseState.X) { if (CurrentScreenIndex < TotalScreenCount) { isSliding = true; currentDragDistance = 0; // dragging to the left slideDirection = SlidingDirection.Right; CurrentScreenIndex++; } } else if (previousMouseDownPosition.X < mouseState.X) { if (CurrentScreenIndex > 0) { isSliding = true; currentDragDistance = 0; // dragging to the right slideDirection = SlidingDirection.Left; CurrentScreenIndex--; } } } else { currentDragDistance += Vector2.Distance(previousMouseDownPosition, mousePosition); previousMouseDownPosition = mousePosition; } } #endif #if WINDOWS_PHONE if (!isSliding) { foreach (var g in InputHandler.Gestures) { // Check for bounding box collision first! if (g.GestureType == GestureType.HorizontalDrag) { if (g.Delta.X > 0) { isSliding = true; slideDirection = SlidingDirection.Left; if (CurrentScreenIndex > 0) { CurrentScreenIndex--; } } else { isSliding = true; slideDirection = SlidingDirection.Right; if (CurrentScreenIndex < TotalScreenCount) { CurrentScreenIndex++; } } } } } #endif } if (isSliding) { float camOffset = (CurrentScreenIndex * ScreenWidth); switch (slideDirection) { case SlidingDirection.Right: if (CameraOffsetX <= -camOffset) { isSliding = false; CameraOffsetX = -camOffset; } else { CameraOffsetX -= SlideSpeed; } break; case SlidingDirection.Left: if (CameraOffsetX >= camOffset) { isSliding = false; CameraOffsetX = camOffset; } else { CameraOffsetX += SlideSpeed; } break; } } // Set our camera offset for our visual objects :] foreach (var vo in VisualObjects) { vo.CameraOffsetX = CameraOffsetX; vo.CameraOffsetY = CameraOffsetY; } }