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);
    }
Beispiel #2
0
        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);
        }
    }
Beispiel #4
0
        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);
    }
Beispiel #6
0
        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);
            }
        }