リザルト表示対応

This commit is contained in:
kimura 2022-08-15 10:54:58 +09:00
parent cbeff6aeff
commit d7c3e31beb
2 changed files with 3546 additions and 139 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MyGame.Scenes.marketing.Scripts;
using TMPro; using TMPro;
using UniRx; using UniRx;
using UnityEngine; using UnityEngine;
@ -16,6 +18,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
[SerializeField] private Button closeButton; [SerializeField] private Button closeButton;
[SerializeField] private Button retryButton; [SerializeField] private Button retryButton;
[SerializeField] private Image meterProgressImage; [SerializeField] private Image meterProgressImage;
[SerializeField] private Image maskImage;
[SerializeField] private Transform recipeMalaImagePrefab;
[SerializeField] private TextMeshProUGUI meterProgressText; [SerializeField] private TextMeshProUGUI meterProgressText;
[SerializeField] private ScrollRect scrollRect; [SerializeField] private ScrollRect scrollRect;
[SerializeField] private ResultItem itemPrefab; [SerializeField] private ResultItem itemPrefab;
@ -39,6 +43,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
public void ShowResult(int score, ScrollGamePlaceData[] placeList, ScrollGameStageData stageData) public void ShowResult(int score, ScrollGamePlaceData[] placeList, ScrollGameStageData stageData)
{ {
score = 1000;
SoundManager.Instance.ChangeVolumeUniqueBGM(.3f); SoundManager.Instance.ChangeVolumeUniqueBGM(.3f);
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
var shopDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopData>(Const.ShopDataSheet); var shopDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopData>(Const.ShopDataSheet);
@ -109,54 +114,99 @@ namespace MyGame.Scenes.MiniGame.Scripts
Shopping.AddItem(shopData, amount); Shopping.AddItem(shopData, amount);
} }
// レシピ獲得 var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
var recipePlaceData = placeList var sortedPlaceList = placeList.Where(data => data.itemId == 0).OrderBy(data => data.NeedScore).ToList();
.OrderBy(data => data.NeedScore) var achievedList = sortedPlaceList
// .Where(data => !gameData.MyRecipes.Contains(data.recipeId)) .Where(data => data.NeedScore > prevPlaceScore)
.FirstOrDefault(data => data.recipeId != 0); .Where(data => data.NeedScore <= placeScoreData.Score);
#if UNITY_EDITOR var prevNeedScore = sortedPlaceList.LastOrDefault(data => data.NeedScore <= prevPlaceScore)?.NeedScore ?? 0;
recipePlaceData = prevPlaceScore < recipePlaceData.NeedScore ? recipePlaceData : null; var progressList = new List<(string name, Transform prefab, int needScore, bool isRecipe)>();
#endif
var hasRecipeData = recipePlaceData != null; foreach (var placeData in achievedList)
var achievedRecipe = hasRecipeData && placeScoreData.Score >= recipePlaceData.NeedScore;
if (achievedRecipe)
{ {
if (!gameData.MyRecipes.Contains(recipePlaceData.recipeId)) // 獲得処理
if (placeData.recipeId != 0)
{ {
gameData.MyRecipes = new List<int>(gameData.MyRecipes){recipePlaceData.recipeId}.ToArray(); if (gameData.MyRecipes.Contains(placeData.recipeId))
{
continue;
}
gameData.MyRecipes = new List<int>(gameData.MyRecipes){placeData.recipeId}.ToArray();
gameData.DailyRecipeGetCount++; gameData.DailyRecipeGetCount++;
var shopData = shopDataList.First(data => data.itemId == placeData.recipeId && data.Category == ItemCategory.Recipe);
// progressList.Add((shopData.Name, shopData.GetPrefab(), placeData.NeedScore, true));
progressList.Add((shopData.Name, recipeMalaImagePrefab, placeData.NeedScore, true));
}
else if (placeData.customizeId != 0)
{
var customizeData = customizeDataList.First(data => data.id == placeData.customizeId);
ShopCustomize.GetItem(customizeData);
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
} }
} }
var nextAchievement = sortedPlaceList.FirstOrDefault(data => data.NeedScore > placeScoreData.Score);
if (nextAchievement != null)
{
if (nextAchievement.recipeId != 0 && !gameData.MyRecipes.Contains(nextAchievement.recipeId))
{
var shopData = shopDataList.First(data => data.itemId == nextAchievement.recipeId && data.Category == ItemCategory.Recipe);
// progressList.Add((shopData.Name, shopData.GetPrefab(), nextAchievement.NeedScore, true));
progressList.Add((shopData.Name, recipeMalaImagePrefab, nextAchievement.NeedScore, true));
}
else if (nextAchievement.customizeId != 0)
{
var customizeData = customizeDataList.First(data => data.id == nextAchievement.customizeId);
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), nextAchievement.NeedScore, false));
}
}
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
// view // view
gameObject.SetActive(true); gameObject.SetActive(true);
titleObject.SetActive(true); titleObject.SetActive(true);
detailObject.SetActive(true); detailObject.SetActive(true);
detailObject.transform.SetLocalPositionY(hasRecipeData ? defaultDetailObjectPos.y : detailOffset); detailObject.transform.SetLocalPositionY(progressList.Count > 0 ? defaultDetailObjectPos.y : detailOffset);
// 商品獲得済みならレシピ非表示 meterObject.SetActive(progressList.Count > 0);
if (hasRecipeData) var basePlaceScore = prevNeedScore;
{ var nextItemSubject = new Subject<Unit>().AddTo(this);
meterObject.SetActive(true); progressList.ToObservable()
SetProgress((float)prevPlaceScore / recipePlaceData.NeedScore, false); .Zip(nextItemSubject.StartWith(Unit.Default).Take(progressList.Count), (x, _) => x)
this.CallWaitForSeconds(waitProgress, () => .ForEachAsync(x =>
{ {
SoundManager.Instance.PlaySE("se_minigame_meter"); SetSilhouette(x.prefab, x.isRecipe);
SetProgress((float)placeScoreData.Score / recipePlaceData.NeedScore, true, () => var prevScore = prevPlaceScore > basePlaceScore ? prevPlaceScore - basePlaceScore : 0;
{ var needScore = x.needScore - basePlaceScore;
if (achievedRecipe) var newScore = placeScoreData.Score - basePlaceScore;
SetProgress((float)prevScore / needScore, false).ToObservable()
.Delay(TimeSpan.FromSeconds(waitProgress))
.Do(_ => SoundManager.Instance.PlaySE("se_minigame_meter"))
.SelectMany(SetProgress((float)newScore / needScore, true))
.Delay(TimeSpan.FromSeconds(.1f))
.Subscribe(_ =>
{ {
ShopItemExchangeView.ShowDialog(shopDataList.FirstOrDefault(data => data.itemId == recipePlaceData.recipeId && data.Category == ItemCategory.Recipe)); if (placeScoreData.Score < x.needScore)
} {
}); nextItemSubject.OnNext(Unit.Default);
}); return;
} }
this.CallWaitForSeconds(hasRecipeData ? waitProgress + waitButtonActive : waitButtonActive, () => ShopItemExchangeView.ShowDialog(x.name, x.prefab, x.isRecipe, () => nextItemSubject.OnNext(Unit.Default));
}).AddTo(this);
basePlaceScore = x.needScore;
})
.SelectMany(nextItemSubject)
.Delay(TimeSpan.FromSeconds(waitButtonActive))
.Subscribe(_ =>
{
closeButton.gameObject.SetActive(true);
retryButton.gameObject.SetActive(true);
}).AddTo(this);
if (progressList.Count == 0)
{ {
closeButton.gameObject.SetActive(true); nextItemSubject.OnNext(Unit.Default);
retryButton.gameObject.SetActive(true); }
});
} }
public void Reset() public void Reset()
@ -170,12 +220,21 @@ namespace MyGame.Scenes.MiniGame.Scripts
progressValue = 0f; progressValue = 0f;
} }
private void SetProgress(float newValue, bool animated = true, Action onComplete = null) private void SetSilhouette(Transform prefab, bool isRecipe)
{
maskImage.transform.parent.SetLocalScale(isRecipe ? 1f : 2f);
maskImage.sprite = prefab.GetComponent<Image>().sprite;
meterProgressImage.sprite = maskImage.sprite;
maskImage.SetNativeSize();
meterProgressImage.SetNativeSize();
}
private IEnumerator SetProgress(float newValue, bool animated = true, Action onComplete = null)
{ {
var prevValue = progressValue; var prevValue = progressValue;
newValue = Mathf.Clamp01(newValue); newValue = Mathf.Clamp01(newValue);
progressValue = newValue; progressValue = newValue;
this.CallLerp(animated ? progressDuration : 0f, f => return MonoBehaviourExtensions.DoCallLerp(animated ? progressDuration : 0f, f =>
{ {
var value = Mathf.Lerp(prevValue, newValue, f.EaseOutQuadratic()); var value = Mathf.Lerp(prevValue, newValue, f.EaseOutQuadratic());
meterProgressText.text = $"{value * 100:0}%"; meterProgressText.text = $"{value * 100:0}%";