-
2021/10/29 상점구현2개발일지/팀GC Defence 2021. 10. 29. 17:17
새로 개발하는 디펜스 게임의 상점을 구현
조건
- 유저인포에 상점 무기 목록이 없다면 새로운 무기 목록을 취득
- 스테이지가 바뀌면 새로운 무기 목록을 취득
- 스테이지를 클리어하지 않으면 기존 무기 목록 취득
작업 순서
- 유저 인포 클래스와 파싱클래스 무기 목록 리스트 추가(무기 코드를 저장)
- 로비 상점 부분에 무기 목록을 표시하는 로직 변경
- 유저 인포 클래스에 스테이지 클리어 로직 추가
1. 유저 인포 클래스와 파싱클래스 무기 목록 리스트 추가
UserInfo.cs
JsonUserInfo.cs
2. 로비 상점 부분에 무기 목록을 표시하는 로직 변경
Lobby.cs
public void ShopLoading() { var prefab = Resources.Load<GameObject>("Prefabs/shopItem"); //유저 인포 shopWeaponRaws리스트에 상점 무기 목록이 들어있는지 확인 if (UserInfo.GetInstance().shopWeaponRaws.Count == 0) { //스테이지 클리어 및 첫 시작일 경우 새로운 무기 목록 표시 ShopNewRandomWeaponList(prefab); UserInfo.GetInstance().SaveUserInfo(); } else { //유저 인포의 무기 목록을 가져와 표시 List<JsonWeapon> tmp = new List<JsonWeapon>(); foreach(var x in UserInfo.GetInstance().shopWeaponRaws) { tmp.Add(DataManager.Instance.GetData<JsonWeapon>(x)); } CreateShowItemList<JsonWeapon>(prefab, shopWeapon, tmp); } CreateShowItemList<JsonUpgrade>(prefab, shopUpgrade, DataManager.Instance.GetDatas<JsonUpgrade>().ToList()); CreateShowItemList<JsonDraw>(prefab, shopDraw, DataManager.Instance.GetDatas<JsonDraw>().ToList()); } public void ShopNewRandomWeaponList(GameObject prefab) { var percentages = DataManager.Instance.GetDatas<JsonShopWeaponGradePercentage>(); List<float> listPercentages = new List<float>(); foreach (var per in percentages) { listPercentages.Add(per.percentage); } //6개 아이템만 표시 for (int i = 0; i < 6; i++) { var go = Instantiate(prefab); var shopItem = go.GetComponent<ShopItem>(); //데이터 매니저에서JsonWeapon타입만 취득 var listWeaponItems = DataManager.Instance.GetDatas<JsonWeapon>(); //shop_weapon_grade_percentage.json파일의 확률을 적용 var grade = Choose(listPercentages.ToArray()); //무기 종류가 5개이므로 동일한 확률로 랜덤 적용 var weaponType = Random.Range(0, 5); foreach (var item in listWeaponItems) { if (item.item_grade == grade && item.weapon_type == weaponType) { UserInfo.GetInstance().shopWeaponRaws.Add(item.raw); shopItem.Init(item); shopItem.transform.SetParent(shopWeapon.transform); break; } } } } public float Choose(float[] probs) { float total = 0; foreach (float elem in probs) { total += elem; } float randomPoint = Random.value * total; for (int i = 0; i < probs.Length; i++) { if (randomPoint < probs[i]) { return i; } else { randomPoint -= probs[i]; } } return probs.Length - 1; } public void CreateShowItemList<T>(GameObject prefab, GameObject tab, List<T> ts) where T : JsonItem { foreach (T item in ts) { var go = Instantiate(prefab); var shopItem = go.GetComponent<ShopItem>(); shopItem.Init(item); shopItem.transform.SetParent(tab.transform); shopItem.btnBuy.onClick.AddListener(() => { if (shopItem.KindOfMoney == Item.KindOfMoney.Gold) { UserInfo.GetInstance().Gold = -shopItem.Price; } else if (shopItem.KindOfMoney == Item.KindOfMoney.RebirthGold) { UserInfo.GetInstance().RebirthGold = -shopItem.Price; } else if (shopItem.KindOfMoney == Item.KindOfMoney.ArtifactSculpture) { UserInfo.GetInstance().ArtifactSculpture = -shopItem.Price; } if(item.GetType() == typeof(JsonWeapon)) { var weapon = new Weapon((JsonWeapon)(object)item); UserInfo.GetInstance().inventory.Add(weapon); UserInfo.GetInstance().SaveUserInfo(); } else if(item.GetType() == typeof(JsonUpgrade)) { } else if(item.GetType() == typeof(JsonDraw)) { } ShowMoney(); }); } } public void ShowMoney() { txtGold.text = string.Format("Gold : {0}", UserInfo.GetInstance().Gold); txtArtifactSculpture.text = string.Format("ArtifactSculpturel : {0}", UserInfo.GetInstance().ArtifactSculpture); txtRebirthGold.text = string.Format("RebirthGold : {0}", UserInfo.GetInstance().RebirthGold); }
3. 유저 인포 클래스에 스테이지 클리어 로직 추가
일반적인 게임 재시작
스테이지 클리어
'개발일지 > 팀GC Defence' 카테고리의 다른 글
2021/10/27 상점구현 (0) 2021.10.27