private void PerformButtonSlide(CornerButton button, SlideDirections direction, Action postAction) { var retinaCenter = new Vector2(480, 320); var buttonCenter = button.Position + new Vector2((float) button.VirtualRegionOnScreen.width / 2.0f, (float) button.VirtualRegionOnScreen.height / 2.0f ); var directingVector = buttonCenter - retinaCenter; directingVector.Normalize(); var sign = direction == SlideDirections.Out ? 1 : -1; var targetPosition = buttonCenter + sign * directingVector * ButtonSlideDistance; Debug.Log(string.Format("{0}: {1}", button.Symbol, targetPosition)); //decentralize position targetPosition -= new Vector2((float)button.VirtualRegionOnScreen.width / 2.0f, (float)button.VirtualRegionOnScreen.height / 2.0f); if (direction == SlideDirections.In) { // need to deal with rounding errors targetPosition = GetSnapPositionForButton(button); } // set different easing functions for sliding in and out Func<float,float> easingFunc = null; if (direction == SlideDirections.Out) { easingFunc = (x) => x * x; } else { easingFunc = (x) => (float)(Math.Log(x) + 2.0f) / 2.0f; } var controller = new UIElementSlideController(easingFunc) { StartPosition = button.Position, TargetPosition = targetPosition, Duration = TimeSpan.FromMilliseconds(250) }; if (postAction != null) { controller.ControllerFinished += (sender, e) => postAction.Invoke(); } button.RemoveController(button.name); button.QueueController(button.name, controller); }
private Vector2 GetSnapPositionForButton(CornerButton button) { EditorDebug.LogWarning("GetSnapPositionsForButton need to be implemented again"); // left if (button.Position.x < 480) { if (button.Position.y > 320) { button.verticalFloat = Frame.VerticalFloatPositions.bottom; button.horizontalFloat = Frame.HorizontalFloatPositions.left; button.UpdateElement(); button.removeFloat(); //return new Vector2(0, 640 - button.VirtualRegionOnScreen.height); } else { button.verticalFloat = Frame.VerticalFloatPositions.top; button.horizontalFloat = Frame.HorizontalFloatPositions.left; button.UpdateElement(); button.removeFloat(); } } else { if (button.Position.y > 320) { button.verticalFloat = Frame.VerticalFloatPositions.bottom; button.horizontalFloat = Frame.HorizontalFloatPositions.right; button.UpdateElement(); button.removeFloat(); //return new Vector2(960 - button.VirtualRegionOnScreen.width, 640 - button.VirtualRegionOnScreen.height); } else { button.verticalFloat = Frame.VerticalFloatPositions.top; button.horizontalFloat = Frame.HorizontalFloatPositions.right; button.UpdateElement(); button.removeFloat(); //return new Vector2(960 - button.VirtualRegionOnScreen.width, 0); } } return button.Position; }