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