Example #1
0
    public void InterpolateSize(ISlotListItem listItem)
    {
        ISlotListSlot currentSlot = listItem.GetCurrentSlot();

        if (currentSlot == null)
        {
            return;
        }

        ESlotListDirection direction  = CalculateOffsetDirection(listItem, Vector2.zero);
        ISlotListSlot      targetSlot = GetTargetSlot(listItem, direction);

        if (targetSlot == null)
        {
            listItem.SetSize(currentSlot.GetSize());
            return;
        }
        float offsetPercent = CalculateOffsetPositionPercent(
            listItem.GetPosition(),
            Vector2.zero,
            currentSlot.GetPosition(),
            targetSlot.GetPosition());

        InterpolateSize(listItem, targetSlot, offsetPercent);
    }
Example #2
0
    public void ApplyOffsetPositionPercent(ISlotListItem listItem)
    {
        ISlotListSlot currentSlot = listItem.GetCurrentSlot();
        ISlotListSlot targetSlot  = GetTargetSlot(listItem, offsetDirection);

        if (targetSlot != null)
        {
            Vector2 interpolatedPosition = currentSlot.GetPosition() + ((targetSlot.GetPosition() - currentSlot.GetPosition()) * offsetPositionPercent);
            listItem.SetPosition(interpolatedPosition);
        }
        else
        {
            listItem.SetPosition(currentSlot.GetPosition());
        }
    }
Example #3
0
    private void InterpolateSize(ISlotListItem listItem, ISlotListSlot targetSlot, float offsetPercent)
    {
        Vector2 currentSlotSize = listItem.GetCurrentSlot().GetSize();

        if (targetSlot == null ||
            offsetPercent.NearlyEquals(0, 0.001f))
        {
            listItem.SetSize(currentSlotSize);
            return;
        }

        // Interpolate size
        Vector2 targetSlotSize   = targetSlot.GetSize();
        Vector2 interpolatedSize = Vector2.Lerp(currentSlotSize, targetSlotSize, offsetPercent);

        listItem.SetSize(interpolatedSize);
    }
Example #4
0
    private ESlotListDirection CalculateOffsetDirection(ISlotListItem listItem, Vector2 dragDelta)
    {
        if (listItem == null)
        {
            return(ESlotListDirection.None);
        }

        Vector2       listItemPosition = listItem.GetPosition() + dragDelta;
        ISlotListSlot currentSlot      = listItem.GetCurrentSlot();

        if (currentSlot == null)
        {
            return(ESlotListDirection.None);
        }

        ISlotListSlot nextSlot = currentSlot.GetNextSlot();

        if (nextSlot != null)
        {
            float distanceNextSlotToCurrentSlot  = Vector2.Distance(nextSlot.GetPosition(), currentSlot.GetPosition());
            float distanceNextSlotToItemPosition = Vector2.Distance(nextSlot.GetPosition(), listItemPosition);
            if (distanceNextSlotToItemPosition < distanceNextSlotToCurrentSlot)
            {
                return(ESlotListDirection.TowardsNextSlot);
            }
        }

        ISlotListSlot previousSlot = currentSlot.GetPreviousSlot();

        if (previousSlot != null)
        {
            float distancePreviousSlotToCurrentSlot  = Vector2.Distance(previousSlot.GetPosition(), currentSlot.GetPosition());
            float distancePreviousSlotToItemPosition = Vector2.Distance(previousSlot.GetPosition(), listItemPosition);
            if (distancePreviousSlotToItemPosition < distancePreviousSlotToCurrentSlot)
            {
                return(ESlotListDirection.TowardsPreviousSlot);
            }
        }

        return(ESlotListDirection.None);
    }
Example #5
0
    void Start()
    {
        for (int i = 0; i < rouletteItemPlaceholders.Count; i++)
        {
            ISlotListSlot previousSlot = 0 <= (i - 1) ? rouletteItemPlaceholders[i - 1] : null;
            ISlotListSlot nextSlot     = (i + 1) <= (rouletteItemPlaceholders.Count - 1) ? rouletteItemPlaceholders[i + 1] : null;
            rouletteItemPlaceholders[i].SetNeighborSlots(previousSlot, nextSlot);
        }
        SlotListControl.SlotChangeEventStream.Subscribe(OnSongRouletteItemChangedSlot);

        activeRouletteItemPlaceholders = new List <RouletteItemPlaceholder>(rouletteItemPlaceholders);
        centerItemIndex = (int)Math.Floor(rouletteItemPlaceholders.Count / 2f);
        centerItem      = rouletteItemPlaceholders[centerItemIndex];

        if (!showRouletteItemPlaceholders)
        {
            foreach (RouletteItemPlaceholder item in rouletteItemPlaceholders)
            {
                Image image = item.GetComponentInChildren <Image>();
                image.enabled = false;
            }
        }
    }
Example #6
0
    public void OnDrag(ISlotListItem listItem, Vector2 dragDelta)
    {
        // Calculate direction
        offsetDirection = CalculateOffsetDirection(listItem, dragDelta);

        // Calculate offset from current slot
        ISlotListSlot targetSlot = GetTargetSlot(listItem, offsetDirection);

        offsetPositionPercent = targetSlot != null
            ? CalculateOffsetPositionPercent(listItem.GetPosition(), dragDelta, listItem.GetCurrentSlot().GetPosition(), targetSlot.GetPosition())
            : 0;

        // Apply this to all list items. This make them move in the same way towards their target slot.
        foreach (ISlotListItem otherListItem in ListItems)
        {
            ApplyOffsetPositionPercent(otherListItem);
        }

        // When the target has been reached, then adjust the current slot of all items
        if (offsetPositionPercent >= 0.6f)
        {
            slotChangeEventStream.OnNext(new SlotChangeEvent(offsetDirection, offsetPositionPercent));
        }
    }
 public void SetNeighborSlots(ISlotListSlot previousSlot, ISlotListSlot nextSlot)
 {
     this.previousSlot = previousSlot;
     this.nextSlot     = nextSlot;
 }