リザルト表示対応
This commit is contained in:
parent
cbeff6aeff
commit
d7c3e31beb
File diff suppressed because it is too large
Load Diff
|
|
@ -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}%";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue