From a8a360961240ea54afb5b1ec096c27ec778572be Mon Sep 17 00:00:00 2001 From: kimura Date: Thu, 23 Jun 2022 17:06:24 +0900 Subject: [PATCH] fix resultmanager --- .../Scenes/MiniGame/Scripts/ResultManager.cs | 134 +++++++++++++++++- .../Scenes/MiniGame/Scripts/ResultView.cs | 17 --- .../MiniGame/Scripts/ResultView.cs.meta | 3 - 3 files changed, 131 insertions(+), 23 deletions(-) delete mode 100644 popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs delete mode 100644 popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs.meta diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultManager.cs index f5a42370..c285bf76 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultManager.cs @@ -1,14 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TMPro; +using UniRx; using UnityEngine; +using UnityEngine.UI; namespace MyGame.Scenes.MiniGame.Scripts { public class ResultManager : MonoBehaviour { - [SerializeField] private ResultView resultView; + [SerializeField] private GameObject titleObject; + [SerializeField] private GameObject meterObject; + [SerializeField] private GameObject detailObject; + [SerializeField] private Button closeButton; + [SerializeField] private Button retryButton; + [SerializeField] private Image meterProgressImage; + [SerializeField] private TextMeshProUGUI meterProgressText; + [SerializeField] private Text materialNameText; + [SerializeField] private Transform materialImage; + [SerializeField] private Text materialAmountText; + [SerializeField] private float detailOffset; + [SerializeField] private float progressDuration = .5f; + [SerializeField] private float waitButtonActive = .5f; + [SerializeField] private float waitProgress = .5f; + private float progressValue; - public void ShowResult() + public IObservable OnRetry => retryButton.OnClickAsObservable().TakeUntilDestroy(this); + public IObservable OnClose => closeButton.OnClickAsObservable().TakeUntilDestroy(this); + + public void ShowResult(int score, ScrollGamePlaceData[] placeList, ScrollGameStageData stageData) { - + /* + * result view 初期化&表示 + * 獲得処理 + * ステージ開放処理 + */ + var gameData = GameDataManager.GameData; + var shopDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopDataSheet); + + if (!(gameData.ScrollGameStageScoreList.FirstOrDefault(data => data.Id == stageData.id) is ScrollGameScoreData stageScoreData)) + { + stageScoreData = new ScrollGameScoreData + { + Id = stageData.id, + Score = 0 + }; + gameData.ScrollGameStageScoreList.Add(stageScoreData); + } + + if (!(gameData.ScrollGamePlaceScoreList.FirstOrDefault(data => data.Id == placeList[0].id) is ScrollGameScoreData placeScoreData)) + { + placeScoreData = new ScrollGameScoreData + { + Id = placeList[0].id, + Score = 0 + }; + gameData.ScrollGamePlaceScoreList.Add(placeScoreData); + } + + // スコア更新 + stageScoreData.Score = Math.Min(stageScoreData.Score, score); + var prevPlaceScore = placeScoreData.Score; + placeScoreData.Score += score; + + foreach (var placeData in placeList.Where(data => data.itemId != 0)) + { + var amount = Mathf.FloorToInt((float)score / placeData.needScore); + var shopData = shopDataList.FirstOrDefault(data => data.itemId == placeData.itemId); + materialNameText.text = shopData.Name; + // materialImage + materialAmountText.text = $"x{amount}"; + Shopping.AddItem(shopData, amount); + } + + var recipePlaceData = placeList + .OrderBy(data => data.needScore) + // .Where(data => !gameData.MyRecipes.Contains(data.recipeId)) + .FirstOrDefault(data => data.recipeId != 0); + if (recipePlaceData != null && placeScoreData.Score >= recipePlaceData.needScore) + { + if (!gameData.MyRecipes.Contains(recipePlaceData.recipeId)) + { + gameData.MyRecipes = new List(gameData.MyRecipes){recipePlaceData.recipeId}.ToArray(); + gameData.DailyRecipeGetCount++; + } + } + GameDataManager.SaveGameData(); + + // view + + gameObject.SetActive(true); + titleObject.SetActive(true); + detailObject.SetActive(true); + + // 商品獲得済みならレシピ非表示 + if (recipePlaceData is null) + { + // detailの表示位置変更 + detailObject.transform.SetLocalPositionY(detailOffset); + } + else + { + meterObject.SetActive(true); + SetProgress((float)prevPlaceScore / recipePlaceData.needScore, false); + this.CallWaitForSeconds(waitProgress, () => + { + SetProgress((float)placeScoreData.Score / recipePlaceData.needScore); + }); + } + this.CallWaitForSeconds(waitButtonActive, () => + { + closeButton.gameObject.SetActive(true); + retryButton.gameObject.SetActive(true); + }); + } + + public void Reset() + { + gameObject.SetActive(false); + titleObject.SetActive(false); + meterObject.SetActive(false); + detailObject.SetActive(false); + closeButton.gameObject.SetActive(false); + retryButton.gameObject.SetActive(false); + progressValue = 0f; + } + + private void SetProgress(float newValue, bool animated = true, Action onComplete = null) + { + var prevProgress = progressValue; + progressValue = newValue; + this.CallLerp(animated ? progressDuration : 0f, f => + { + var value = Mathf.Lerp(prevProgress, newValue, f.EaseOutQuadratic()); + meterProgressText.text = $"{value * 100:0}%"; + meterProgressImage.fillAmount = value; + }, () => onComplete?.Invoke()); } } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs deleted file mode 100644 index 72b3bee1..00000000 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.UI; - -namespace MyGame.Scenes.MiniGame.Scripts -{ - public class ResultView : MonoBehaviour - { - [SerializeField] private Button closeButton; - [SerializeField] private Button retryButton; - - private void Start() - { - - } - } -} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs.meta b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs.meta deleted file mode 100644 index 3f79df2d..00000000 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/ResultView.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7f2d9998fe34453ca2ef6df451a75184 -timeCreated: 1655717498 \ No newline at end of file