// TODO: 더 좋은 아이템 나올 확률 또는 아이템 2개 나올확률 추가. public void ResetCooltime() { // 관찰자들에게 Click 이벤트 메세지 송출 foreach (var target in _dataController.Observers) { ExecuteEvents.Execute <IEventListener>(target, null, (x, y) => x.OnObjClick(this)); } // 버튼 활성화 시 if (!Btn) { return; } // 세트 아이템 랜덤 생성 var id = Random.Range(4001, 4059); while (id % 5 == 0) { id = Random.Range(4001, 4059); } // 도감에 등록만 되면 됨 _dataController.InsertNewItem(id); AudioManager.Instance.ItemSound(); PopUpWindow.Alert("[서적] " + DataDictionary.Instance.FindItemDic[id].Name + " 획득"); LeftTimer = _reducedCooltime; Btn.enabled = false; }
// 게이지 클릭 public void OnClick() { // 아이템 갯수 제한 if (_dataController.ItemCount >= _dataController.ItemLimit) { PopUpWindow.Alert("창고가 꽉 차있어요!"); return; } var energy = _dataController.Energy + _energyPerClick; ImgEarthback.fillAmount = (float)energy / _energyMaxValue; _dataController.Energy = energy; // 현재 에너지가 필요한 에너지보다 작은 경우 if (_dataController.Energy < _energyMaxValue) { return; } // 나무일 때 if (SwitchMode.Instance.State) { GenerateItem(Random.Range(0, 100) >= DataController.AtlasItemProb * DataController.TwiceAll ? Random.Range(0, 6) * 5 + 2002 : Random.Range(0, 6) * 5 + 2001, true); } else // 별일 때 { // 5%의 확률로 별의 잔재 등장 if (Random.Range(0, 100) < 5) { GenerateItem(5001, true); } else { GenerateItem(Random.Range(0, 100) >= DataController.AtlasItemProb * DataController.TwiceAll ? Random.Range(0, 3) * 5 + 1002 : Random.Range(0, 3) * 5 + 1001, true); } } Btn.enabled = false; StartCoroutine(DecreaseEnergy()); AudioManager.Instance.ClickSound(); AudioManager.Instance.ItemSound(); // 관찰자들에게 Click 이벤트 메세지 송출 foreach (var target in _dataController.Observers) { ExecuteEvents.Execute <IEventListener>(target, null, (x, y) => x.OnObjClick(this)); } }
private void ExchangeBtnClick(int itemIdx, int btnIdx) { var deleteAmount = new int[3]; //[0]Red [1]Blue [2]Green 삭제될 별 개수 for (var i = 0; i < 3; i++) { // 별 아이템의 index var starIdx = 1001 + btnIdx + i * 5; deleteAmount[i] = _dataController.GetItemNum(starIdx); } var reqireedAmount = ExchangeRatio[btnIdx]; // 별 아이템 개수가 필요한 양(ExchangeRatio[btnIdx])보다 많거나 같을 경우 if (deleteAmount.Sum() >= reqireedAmount) { var deleted = 0; for (var i = 0; i < 3; i++) { // 별 아이템의 index var starIdx = 1001 + btnIdx + i * 5; for (var j = 0; j < deleteAmount[i]; j++) { if (deleted >= reqireedAmount) { break; } _dataController.DeleteItem(starIdx); deleted++; //요구량 다 채우면 안 하기 } } _dataController.InsertNewItem(itemIdx); ExchangePanel.SetActive(false); // refresh scene SceneManager.LoadScene("BookList"); } else { // TODO: 잠깐 버튼 클릭 막기 PopUpWindow.Alert("재료가 부족합니다."); } }
/// <summary> /// 새 아이템 더티 플래그를 제거해줌 /// </summary> /// <param name="idx">아이템 인덱스</param> /// <param name="lockImg">자물쇠모양 이미지 겸 느낌표 이미지</param> private void RemoveAlert(int idx, Component lockImg) { // 획득했으므로 더티 플래그와 느낌표 아이콘 갱신 _dataController.NewBookList.Remove(idx); DataController.SaveGameData(_dataController.NewBookList, _dataController.NewBookListPath); lockImg.gameObject.SetActive(false); // 아이템 정보를 얻어 획득 보상 처리 (최초 1회) var item = _dataDic.FindItemDic[idx]; PopUpWindow.Alert(item.Name + " 획득 보상: " + item.SellPrice + " 골드"); _dataController.Gold += (ulong)item.SellPrice; // 관찰자들에게 이벤트 메세지 송출 foreach (var target in _dataController.Observers) { ExecuteEvents.Execute <IEventListener>(target, null, (x, y) => x.OnObjClick(this)); } }
private void OnTriggerEnter2D(Collider2D collision) //TODO: 상위 아이템 생성확률 추가 { if (!collision.CompareTag("Material") || !collision.isTrigger) { return; } var collItem = collision.GetComponent <Item>(); var collItemInfo = collItem.Info; if (collItemInfo.CheckDestroy) { return; } // 조합표에 있는 조합식인지 검색한다. var dataDic = DataDictionary.Instance; var myItemInfo = GetComponent <Item>().Info; var key1 = myItemInfo.Index; var key2 = collItemInfo.Index; var resultList = dataDic.FindCombine(key1, key2); if (resultList == null) { PopUpWindow.Alert("조합할 수 없어요"); return; } collItemInfo.CheckDestroy = true; // 조합표에 있다면 충돌 당한 물체를 결과 재료로 바꾸어준다. // 조합 결과 개수를 얻어온다. var resultNum = resultList.Count; var findItemInfo = dataDic.FindItem(resultList[Random.Range(0, resultNum)]); // 관찰자들에게 이벤트 메세지 송출, myItemInfo 바뀌기 전 정보 보냄. foreach (var target in _dataController.Observers) { ExecuteEvents.Execute <IEventListener>(target, null, (x, y) => x.OnCombine(myItemInfo, collItemInfo, findItemInfo)); } myItemInfo.Index = findItemInfo.Index; myItemInfo.Name = findItemInfo.Name; myItemInfo.Group = findItemInfo.Group; myItemInfo.Grade = findItemInfo.Grade; myItemInfo.SellPrice = findItemInfo.SellPrice; myItemInfo.Description = findItemInfo.Description; myItemInfo.ImagePath = findItemInfo.ImagePath; GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>(dataDic.FindItemDic[myItemInfo.Index].ImagePath); // 충돌한 물체를 가지고 있는 재료 dictionary에서 삭제한다. _dataController.DeleteItem(key2, collItem.Id); _dataController.DeleteItem(key1, GetComponent <Item>().Id); _dataController.InsertNewItem(myItemInfo.Index, GetComponent <Item>().Id, transform.position); // 조합 후 충돌한 물체를 파괴한다. Destroy(collision.gameObject); AudioManager.Instance.MixSound(); // 조합표에 없다면 그냥 무시한다. CameraController.FocusOnItem = false; }