예제 #1
0
        /// <summary>
        /// アイテムを獲得する
        /// </summary>
        /// <param name="item"></param>
        /// <returns>アイテムを獲得したかどうか
        /// スロットの関係などで獲得できなかった場合はfalseを返す</returns>
        public bool GetItem(Item item)
        {
            AlignItems();
            bool result = false;

            //既に持っていてそれに重ねることができる場合はそうする
            for (var i = 0; i < SlotCount; i++)
            {
                if (ItemSlot[i] != null && ItemSlot[i].Combine(item))
                {
                    result = true;
                    break;
                }
            }

            if (!result)
            {
                //アイテムスロットの空きを取得
                int brank = ItemSlot.FindAll((i) => i == null).Count;

                //獲得するアイテムが要するスロット数を満たしていれば
                //アイテムを獲得する
                if (item.Size < brank)
                {
                    ItemSlot[SlotCount - brank] = item;
                    for (var i = 0; i < item.Size - 1; i++)
                    {
                        ItemSlot[SlotCount - brank + 1 + i] = new ConnectedSlot(item);
                    }
                    item.SetPlayer(this);
                    result = true;
                }
            }
            return(result);
        }
예제 #2
0
        /// <summary>
        /// ItemSlotを、nullがListのインデックスの大きい所へ来るようにソートする
        /// たとえば、{Item1, Item2, Connected, null, Item3, null}とかだったら
        /// {Item1, Item2, Connected, Item3, null, null}になってほしい
        /// </summary>
        public void AlignItems()
        {
            Item[] items = new Item[ItemSlot.Count];
            ItemSlot.CopyTo(items);
            List <Item> list = new List <Item>(items);

            list.RemoveAll(i => i == null || i.GetType() == typeof(ConnectedSlot));
            for (var i = 0; i < SlotCount - 1; i++)
            {
                ItemSlot[i] = null;
            }
            int index = 0;

            foreach (var item in list)
            {
                ItemSlot[index] = item;
                for (var i = 0; i < item.Size - 1; i++)
                {
                    ItemSlot[index + i + 1] = new ConnectedSlot(item);
                }
                index += item.Size;
            }
        }
예제 #3
0
        /// <summary>
        /// アイテムを獲得する
        /// </summary>
        /// <param name="item"></param>
        /// <returns>アイテムを獲得したかどうか
        /// スロットの関係などで獲得できなかった場合はfalseを返す</returns>
        public bool GetItem(Item item)
        {
            AlignItems();
            bool result = false;

            //既に持っていてそれに重ねることができる場合はそうする
            for(var i = 0;i < SlotCount;i++)
            {
                if(ItemSlot[i] != null && ItemSlot[i].Combine(item))
                {
                    result = true;
                    break;
                }
            }

            if (!result)
            {
                //アイテムスロットの空きを取得
                int brank = ItemSlot.FindAll((i) => i == null).Count;

                //獲得するアイテムが要するスロット数を満たしていれば
                //アイテムを獲得する
                if(item.Size < brank)
                {
                    ItemSlot[SlotCount - brank] = item;
                    for(var i = 0;i < item.Size - 1;i++)
                    {
                        ItemSlot[SlotCount - brank + 1 + i] = new ConnectedSlot(item);
                    }
                    item.SetPlayer(this);
                    result = true;
                }
            }
            return result;
        }
예제 #4
0
 /// <summary>
 /// ItemSlotを、nullがListのインデックスの大きい所へ来るようにソートする
 /// たとえば、{Item1, Item2, Connected, null, Item3, null}とかだったら
 /// {Item1, Item2, Connected, Item3, null, null}になってほしい
 /// </summary>
 public void AlignItems()
 {
     Item[] items = new Item[ItemSlot.Count];
     ItemSlot.CopyTo(items);
     List<Item> list = new List<Item>(items);
     list.RemoveAll(i => i == null || i.GetType() == typeof(ConnectedSlot));
     for(var i = 0;i < SlotCount - 1;i++)
     {
         ItemSlot[i] = null;
     }
     int index = 0;
     foreach(var item in list)
     {
         ItemSlot[index] = item;
         for(var i = 0;i < item.Size - 1;i++)
         {
             ItemSlot[index + i + 1] = new ConnectedSlot(item);
         }
         index += item.Size;
     }
 }