コード例 #1
0
ファイル: ItemTimer.cs プロジェクト: kugorang/StarryNight
        // 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;
        }
コード例 #2
0
ファイル: CreateItem.cs プロジェクト: kugorang/StarryNight
        // 게이지 클릭
        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));
            }
        }
コード例 #3
0
        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("재료가 부족합니다.");
            }
        }
コード例 #4
0
        /// <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));
            }
        }
コード例 #5
0
ファイル: CombineItem.cs プロジェクト: kugorang/StarryNight
        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;
        }