private int FindLetterIndex(LetterItem item) { //binary searching int minIndex = 0; int maxIndex = letters.Count - 1; float y = item.transform.position.y; while (minIndex <= maxIndex) { int mid = (minIndex + maxIndex) / 2; if (y == letters[mid].transform.position.y) { float x = item.transform.position.x; while (mid >= 0 && mid < letters.Count && x < letters[mid].transform.position.x && y == letters[mid].transform.position.y) { mid--; } while (mid >= 0 && mid < letters.Count && x > letters[mid].transform.position.x && y == letters[mid].transform.position.y) { mid++; } return(mid); } else if (y < letters[mid].transform.position.y) { maxIndex = mid - 1; } else { minIndex = mid + 1; } } return(-1); }
public float Read(KeyValuePair <char, string>[] letters) { LetterItem i = Search(letters); if (i == null) { throw new ArgumentException("Not found"); } //return -1; // TODO throw? return(i.cost); }
public void RemoveLetter(LetterItem item) { if (item == null) { return; } int index = FindLetterIndex(item); if (index >= 0) { letters.RemoveAt(index); } }
public void Add(KeyValuePair <char, string>[] letters, float cost) { // check no updates-duplicates if (Search(letters) != null) { return; } LetterItem item = new LetterItem(); item.ltrs = letters; item.cost = cost; items.Add(item); last = item; }
public int AddToLetters(LetterItem item) { //binary searching int minIndex = 0; int maxIndex = letters.Count - 1; float y = item.transform.position.y; while (minIndex <= maxIndex) { int mid = (minIndex + maxIndex) / 2; if (y == letters[mid].transform.position.y) { float x = item.transform.position.x; while (mid - 1 >= 0 && mid - 1 < letters.Count && x < letters[mid - 1].transform.position.x && y == letters[mid - 1].transform.position.y) { mid--; } while (mid >= 0 && mid < letters.Count && x > letters[mid].transform.position.x && y == letters[mid].transform.position.y) { mid++; } if (mid == letters.Count) { letters.Add(item); } else { letters.Insert(mid, item); } return(mid); } else if (y < letters[mid].transform.position.y) { maxIndex = mid - 1; } else { minIndex = mid + 1; } } letters.Insert(minIndex, item); return(minIndex); }
public static void Seal(User user, string target) { UserIdType idtype; User targetuser = UserManager.FindUser(target, out idtype); if (idtype == UserIdType.Unknown) { ChatManager.ServerMessageToPlayer("User " + target + " not found", user); return; } if (!(user.Inventory.Toolbar.SelectedItem is NoteItem)) { ChatManager.ServerMessageToPlayer("No Note selected", user); return; } LetterItem letter = (LetterItem)Item.Create <LetterItem>(); letter.content = user.Inventory.Toolbar.SelectedItem; letter.contentquantity = user.Inventory.Toolbar.SelectedStack.Quantity; letter.recipient = targetuser; letter.sender = user; InventoryChangeSet inventoryChange = new InventoryChangeSet(user.Inventory, user); inventoryChange.RemoveItem(typeof(EnvelopeItem)); inventoryChange.ModifyStack(user.Inventory.Toolbar.SelectedStack, 1 - user.Inventory.Toolbar.SelectedStack.Quantity, letter); if (inventoryChange.TryApply().Success) { return; } else { ChatManager.ServerMessageToPlayer("Not enough Envelopes found", user); } }