/// <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); }
/// <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; } }
/// <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; }
/// <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; } }