public override void OnArrow(float horizontal, float vertical) { // Moving left or right if (Mathf.Abs(horizontal) > Mathf.Abs(vertical)) { int sign = System.Math.Sign(horizontal); // Moving from left to right if (CurrentSide == Side.SOURCE && TradeDestinationMenuItems.Count > 0 && sign == 1) { TradeMenuItem previousItem = TradeSourceMenuItems[SourceItemsIndex]; if (previousItem != null) { previousItem.Text.text = previousItem.Text.text.Replace(Menu.INDICATOR, ""); } SetItemsTextsIndex(TradeDestinationMenuItems, ref _destinationItemsIndex); CurrentSide = Side.DESTINATION; } // moving from right to left else if (CurrentSide == Side.DESTINATION && TradeSourceMenuItems.Count > 0 && sign == -1) { TradeMenuItem previousItem = TradeDestinationMenuItems[DestinationItemsIndex]; if (previousItem != null) { previousItem.Text.text = previousItem.Text.text.Replace(Menu.INDICATOR, ""); } SetItemsTextsIndex(TradeSourceMenuItems, ref _sourceItemsIndex); CurrentSide = Side.SOURCE; } else { Debug.Log("Just stay where you are I guess"); } } // Moving up or down else { int sign = System.Math.Sign(vertical) * -1; if (CurrentSide == Side.SOURCE) { SetItemsTextsIndex(TradeSourceMenuItems, ref _sourceItemsIndex, (SourceItemsIndex + TradeSourceMenuItems.Count + sign) % TradeSourceMenuItems.Count); } else { SetItemsTextsIndex(TradeDestinationMenuItems, ref _destinationItemsIndex, (DestinationItemsIndex + TradeDestinationMenuItems.Count + sign) % TradeDestinationMenuItems.Count); } } }
private void SetItemsTextsIndex(List <TradeMenuItem> tradeMenuItems, ref int masterIndex, int index = 0) { // Remove indicator from previous text if (masterIndex < tradeMenuItems.Count) { TradeMenuItem previousItem = tradeMenuItems[masterIndex]; previousItem.Text.text = previousItem.Text.text.Replace(Menu.INDICATOR, ""); } // Update currently selected text masterIndex = index; TradeMenuItem currentItem = tradeMenuItems[masterIndex]; currentItem.Text.text += Menu.INDICATOR; }
public override void OnSubmit() { SourceCharacter.HasTraded = true; SourceCharacter.HasMoved = true; if (CurrentSide == Side.SOURCE) { TradeMenuItem tradeMenuItem = TradeSourceMenuItems[SourceItemsIndex]; _ = SourceCharacter.Items.Remove(tradeMenuItem.Item); _ = TradeSourceMenuItems.Remove(tradeMenuItem); DestinationCharacter.Items.Add(tradeMenuItem.Item); TradeDestinationMenuItems.Add(new TradeMenuItem(TradeDestinationPanel, tradeMenuItem.Item)); Destroy(tradeMenuItem.Text.gameObject); if (SourceCharacter.Items.Count == 0) { CurrentSide = Side.DESTINATION; SetItemsTextsIndex(TradeDestinationMenuItems, ref _destinationItemsIndex); } else { Debug.LogFormat("Setting source index from {0} to {1}", SourceItemsIndex, Mathf.Min(SourceItemsIndex, TradeSourceMenuItems.Count - 1)); SetItemsTextsIndex(TradeSourceMenuItems, ref _sourceItemsIndex, Mathf.Min(SourceItemsIndex, TradeSourceMenuItems.Count - 1)); } } else { TradeMenuItem tradeMenuItem = TradeDestinationMenuItems[DestinationItemsIndex]; _ = DestinationCharacter.Items.Remove(tradeMenuItem.Item); _ = TradeDestinationMenuItems.Remove(tradeMenuItem); SourceCharacter.Items.Add(tradeMenuItem.Item); TradeSourceMenuItems.Add(new TradeMenuItem(TradeSourcePanel, tradeMenuItem.Item)); Destroy(tradeMenuItem.Text.gameObject); if (DestinationCharacter.Items.Count == 0) { CurrentSide = Side.SOURCE; SetItemsTextsIndex(TradeSourceMenuItems, ref _sourceItemsIndex); } else { SetItemsTextsIndex(TradeDestinationMenuItems, ref _destinationItemsIndex, Mathf.Min(DestinationItemsIndex, TradeDestinationMenuItems.Count - 1)); } } }