Exemplo n.º 1
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            if (snapType.HasFlagFast(SnapType.NearbyObjects) && snapToVisibleBlueprints(screenSpacePosition, out var snapResult))
            {
                return(snapResult);
            }

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (distanceSnapToggle.Value == TernaryState.True && distanceSnapGrid != null)
                {
                    (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }

                if (rectangularGridSnapToggle.Value == TernaryState.True)
                {
                    Vector2 pos = rectangularPositionSnapGrid.GetSnappedPosition(rectangularPositionSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(rectangularPositionSnapGrid.ToScreenSpace(pos), null, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }
            }

            return(base.FindSnappedPositionAndTime(screenSpacePosition, snapType));
        }
Exemplo n.º 2
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            var result = base.FindSnappedPositionAndTime(screenSpacePosition, snapType);

            result.ScreenSpacePosition.X = screenSpacePosition.X;

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (distanceSnapGrid.IsPresent && distanceSnapGrid.GetSnappedPosition(result.ScreenSpacePosition) is SnapResult snapResult &&
                    Vector2.Distance(snapResult.ScreenSpacePosition, result.ScreenSpacePosition) < distance_snap_radius)
                {
                    result = snapResult;
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            var    playfield  = PlayfieldAtScreenSpacePosition(screenSpacePosition);
            double?targetTime = null;

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (playfield is ScrollingPlayfield scrollingPlayfield)
                {
                    targetTime = scrollingPlayfield.TimeAtScreenSpacePosition(screenSpacePosition);

                    // apply beat snapping
                    targetTime = BeatSnapProvider.SnapTime(targetTime.Value);

                    // convert back to screen space
                    screenSpacePosition = scrollingPlayfield.ScreenSpacePositionAtTime(targetTime.Value);
                }
            }

            return(new SnapResult(screenSpacePosition, targetTime, playfield));
        }