IEnumerator ConsumeCoroutine(Item item) { ItemData itemData = item.Data; _isWaitingForItem = false; yield return(new WaitForEndOfFrame()); _nextItemImage.gameObject.SetActive(false); _wantedItemImage.gameObject.SetActive(false); Destroy(item.gameObject); yield return(new WaitForSeconds(3f)); if (itemData == _wantedItem) { _defuseAmount += 10f; _defuseAmountImage.fillAmount = Mathf.Clamp01(_defuseAmount / _defuseRequired); UIFlashDisplay.Instance.Flash(new Color(.3f, 1f, .3f, .3f)); GetNewItem(); } else { Vector3 direction = Random.insideUnitCircle.normalized; itemData.Create(transform.position + direction * 1.5f, direction); UIFlashDisplay.Instance.Flash(new Color(1f, .3f, .3f, .7f)); CountdownController.Instance.WrongTool(); yield return(new WaitForSeconds(.5f)); _wantedItemImage.gameObject.SetActive(true); if (_itemList.Count > 0) { _nextItemImage.gameObject.SetActive(true); } } if (_defuseAmount >= _defuseRequired || _wantedItem == null) { UIFinalMenu.WON_GAME = true; SceneManager.LoadScene("FinalMenu"); } else { _isWaitingForItem = true; Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, _triggerCollider.radius, 1 << LayerMask.NameToLayer("Item")); foreach (var collider in colliders) { Item castItem = collider.GetComponent <Item>(); if (castItem) { ConsumeItem(castItem); break; } } } }
public void Activate(System.Action callback) { var invItem = inventory.GetItemByName(item.itemName); if (invItem != null) { invItem.SetNumItems(invItem.GetNumItems() + quantityChange); } else if (quantityChange > 0) { var actualItem = item.Create(playerCharacter.GetCharacter()); inventory.AddItem(actualItem); if (quantityChange > 1) { actualItem.SetNumItems(quantityChange); } } callback(); }
private ItemData GetItem(int index, ItemData recyclableItem, bool init) { if (_dataProvider == null || index < 0 || _dataProvider.DataCount <= index) { recyclableItem?.obj.SetActive(false); return(recyclableItem); } // 表示するGameObject var gameObj = _dataProvider.GetItemObj(index); if (gameObj == null) { return(null); } // キャッシュに登録されているか List <ItemData> objCaches; if (!_itemDataCaches.TryGetValue(gameObj, out objCaches)) { objCaches = new List <ItemData>(); _itemDataCaches.Add(gameObj, objCaches); } if (recyclableItem != null) { if (gameObj != recyclableItem.objOrigin) { var caches = _itemDataCaches[recyclableItem.objOrigin]; caches.Add(recyclableItem); recyclableItem = null; } } else { // キャッシュがあればそれを使用する。なければ新しく生成 if (objCaches.Count > 0) { recyclableItem = objCaches[0]; recyclableItem.index = index; // 参照Index値を更新する objCaches.RemoveAt(0); } else { // なければ生成 // todo: ここは生成方法を選択できるようにしておくと良いかも GameObject newObject = default; if (_creator != null) { newObject = _creator.CreateScrollItem(index, gameObj, ScrollRect.content); } // nullの場合はデフォルトの生成方法を使用する if (newObject == null) { newObject = _container.InstantiatePrefab(gameObj, ScrollRect.content); } recyclableItem = ItemData.Create(newObject, gameObj, index, _dataProvider.GetItemSize(index)); // 生成時には初期化フラグを強制的に立てる init = true; } } if (recyclableItem.rectTransform.parent != ScrollRect.content) { recyclableItem.rectTransform.SetParent(ScrollRect.content, false); } // 座標の設定 recyclableItem.rectTransform.anchoredPosition = GetVectorPositionByCache(index); recyclableItem.obj.SetActive(true); // 更新を伝える _dataProvider.ScrollItemUpdate(index, recyclableItem.obj, init); return(recyclableItem); }
void PurchaseClicked() { inventory.Gold -= cost; inventory.AddItem(item.Create(playerCharacter.GetCharacter())); }