ミニゲーム報酬表示改善
This commit is contained in:
parent
ae1d93913f
commit
5c180fb212
|
|
@ -116,10 +116,9 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
|
|
||||||
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
||||||
var sortedPlaceList = placeList.Where(data => data.itemId == 0).OrderBy(data => data.NeedScore).ToList();
|
var sortedPlaceList = placeList.Where(data => data.itemId == 0).OrderBy(data => data.NeedScore).ToList();
|
||||||
|
// 最新のスコアで獲得可能な範囲の報酬を取得
|
||||||
var achievedList = sortedPlaceList
|
var achievedList = sortedPlaceList
|
||||||
.Where(data => data.NeedScore > prevPlaceScore)
|
|
||||||
.Where(data => data.NeedScore <= placeScoreData.Score);
|
.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)>();
|
var progressList = new List<(string name, Transform prefab, int needScore, bool isRecipe)>();
|
||||||
|
|
||||||
foreach (var placeData in achievedList)
|
foreach (var placeData in achievedList)
|
||||||
|
|
@ -131,36 +130,58 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
var shopData = shopDataList.FirstOrDefault(data => data.itemId == placeData.recipeId && data.Category == ItemCategory.Recipe);
|
||||||
|
if (shopData is null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
gameData.MyRecipes = new List<int>(gameData.MyRecipes){placeData.recipeId}.ToArray();
|
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, shopData.GetPrefab(), placeData.NeedScore, true));
|
||||||
progressList.Add((shopData.Name, recipeMalaImagePrefab, placeData.NeedScore, true));
|
progressList.Add((shopData.Name, recipeMalaImagePrefab, placeData.NeedScore, true));
|
||||||
}
|
}
|
||||||
else if (placeData.customizeId != 0)
|
else if (placeData.customizeId != 0)
|
||||||
{
|
{
|
||||||
var customizeData = customizeDataList.First(data => data.id == placeData.customizeId);
|
if (gameData.ShopCustomizeMyItems.Contains(placeData.customizeId))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var customizeData = customizeDataList.FirstOrDefault(data => data.id == placeData.customizeId);
|
||||||
|
if (customizeData is null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ShopCustomize.GetItem(customizeData);
|
ShopCustomize.GetItem(customizeData);
|
||||||
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
|
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 前回獲得時の必要スコアを取得
|
||||||
|
var prevNeedScore = sortedPlaceList.LastOrDefault(data => data.NeedScore < progressList[0].needScore)?.NeedScore ?? 0;
|
||||||
|
|
||||||
var nextAchievement = sortedPlaceList.FirstOrDefault(data => data.NeedScore > placeScoreData.Score);
|
foreach (var placeData in sortedPlaceList.Where(data => data.NeedScore > placeScoreData.Score))
|
||||||
if (nextAchievement != null)
|
|
||||||
{
|
{
|
||||||
if (nextAchievement.recipeId != 0 && !gameData.MyRecipes.Contains(nextAchievement.recipeId))
|
if (placeData.recipeId != 0 && !gameData.MyRecipes.Contains(placeData.recipeId))
|
||||||
{
|
{
|
||||||
var shopData = shopDataList.First(data => data.itemId == nextAchievement.recipeId && data.Category == ItemCategory.Recipe);
|
var shopData = shopDataList.FirstOrDefault(data => data.itemId == placeData.recipeId && data.Category == ItemCategory.Recipe);
|
||||||
// progressList.Add((shopData.Name, shopData.GetPrefab(), nextAchievement.NeedScore, true));
|
if (shopData is null)
|
||||||
progressList.Add((shopData.Name, recipeMalaImagePrefab, nextAchievement.NeedScore, true));
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// progressList.Add((shopData.Name, shopData.GetPrefab(), placeData.NeedScore, true));
|
||||||
|
progressList.Add((shopData.Name, recipeMalaImagePrefab, placeData.NeedScore, true));
|
||||||
}
|
}
|
||||||
else if (nextAchievement.customizeId != 0)
|
else if (placeData.customizeId != 0)
|
||||||
{
|
{
|
||||||
var customizeData = customizeDataList.First(data => data.id == nextAchievement.customizeId);
|
var customizeData = customizeDataList.FirstOrDefault(data => data.id == placeData.customizeId);
|
||||||
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), nextAchievement.NeedScore, false));
|
if (customizeData is null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GameDataManager.SaveGameData();
|
GameDataManager.SaveGameData();
|
||||||
|
|
||||||
// view
|
// view
|
||||||
|
|
@ -171,15 +192,26 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
|
|
||||||
meterObject.SetActive(progressList.Count > 0);
|
meterObject.SetActive(progressList.Count > 0);
|
||||||
var basePlaceScore = prevNeedScore;
|
var basePlaceScore = prevNeedScore;
|
||||||
|
/*
|
||||||
|
* 進捗を途中表示するための計算
|
||||||
|
* ただしデータ追加などで前回スコアより小さい必要スコアの報酬が存在する場合は
|
||||||
|
* 進捗を0からスタートさせる
|
||||||
|
*/
|
||||||
|
var prevScore = 0;
|
||||||
|
if (basePlaceScore < prevPlaceScore && prevPlaceScore < progressList[0].needScore)
|
||||||
|
{
|
||||||
|
prevScore = prevPlaceScore - basePlaceScore;
|
||||||
|
}
|
||||||
|
|
||||||
var nextItemSubject = new Subject<Unit>().AddTo(this);
|
var nextItemSubject = new Subject<Unit>().AddTo(this);
|
||||||
progressList.ToObservable()
|
progressList.ToObservable()
|
||||||
.Zip(nextItemSubject.StartWith(Unit.Default).Take(progressList.Count), (x, _) => x)
|
.Zip(nextItemSubject.StartWith(Unit.Default).Take(progressList.Count), (x, _) => x)
|
||||||
.ForEachAsync(x =>
|
.ForEachAsync(x =>
|
||||||
{
|
{
|
||||||
SetSilhouette(x.prefab, x.isRecipe);
|
SetSilhouette(x.prefab, x.isRecipe);
|
||||||
var prevScore = prevPlaceScore > basePlaceScore ? prevPlaceScore - basePlaceScore : 0;
|
// オフセット計算
|
||||||
var needScore = x.needScore == basePlaceScore ? 1 : x.needScore - basePlaceScore;
|
var needScore = x.needScore <= basePlaceScore ? 1 : x.needScore - basePlaceScore;
|
||||||
var newScore = x.needScore == basePlaceScore ? 1 : placeScoreData.Score - basePlaceScore;
|
var newScore = x.needScore <= basePlaceScore ? 1 : placeScoreData.Score - basePlaceScore;
|
||||||
basePlaceScore = x.needScore;
|
basePlaceScore = x.needScore;
|
||||||
SetProgress((float)prevScore / needScore, false).ToObservable()
|
SetProgress((float)prevScore / needScore, false).ToObservable()
|
||||||
.Delay(TimeSpan.FromSeconds(waitProgress))
|
.Delay(TimeSpan.FromSeconds(waitProgress))
|
||||||
|
|
@ -195,6 +227,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
}
|
}
|
||||||
ShopItemExchangeView.ShowDialog(x.name, x.prefab, x.isRecipe, () => nextItemSubject.OnNext(Unit.Default));
|
ShopItemExchangeView.ShowDialog(x.name, x.prefab, x.isRecipe, () => nextItemSubject.OnNext(Unit.Default));
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
|
// 初回のみ0以外の値が入るため・・・
|
||||||
|
prevScore = 0;
|
||||||
})
|
})
|
||||||
.SelectMany(nextItemSubject)
|
.SelectMany(nextItemSubject)
|
||||||
.Delay(TimeSpan.FromSeconds(waitButtonActive))
|
.Delay(TimeSpan.FromSeconds(waitButtonActive))
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,11 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
private ScrollGamePlaceData[] sortedPlaceDataListByNeedScore;
|
private ScrollGamePlaceData[] sortedPlaceDataListByNeedScore;
|
||||||
public IObservable<Unit> OnClick => selectButton.OnClickAsObservable().TakeUntilDestroy(this);
|
public IObservable<Unit> OnClick => selectButton.OnClickAsObservable().TakeUntilDestroy(this);
|
||||||
public void SetStageHiScore(int num) => stageHiScore.text = $"{LocalizationManager.GetTranslation("UI/HiScore")}{num}";
|
public void SetStageHiScore(int num) => stageHiScore.text = $"{LocalizationManager.GetTranslation("UI/HiScore")}{num}";
|
||||||
public void SetTotalScore(int num)
|
public void SetTotalScore(int newScore)
|
||||||
{
|
{
|
||||||
totalScore.text = $"{LocalizationManager.GetTranslation("UI/TotalScore")}{num}";
|
totalScore.text = $"{LocalizationManager.GetTranslation("UI/TotalScore")}{newScore}";
|
||||||
achievementObject.SetActive(num < sortedPlaceDataListByNeedScore.Max(data => data.NeedScore));
|
var hasUpdate = UpdateAchievement();
|
||||||
UpdateAchievement(num);
|
achievementObject.SetActive(hasUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetPlaceData(ScrollGamePlaceData[] placeDataList)
|
public void SetPlaceData(ScrollGamePlaceData[] placeDataList)
|
||||||
|
|
@ -40,23 +40,45 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
itemText.text = $"{LocalizationManager.GetTranslation("UI/EarnItem")}{shopData.Name}";
|
itemText.text = $"{LocalizationManager.GetTranslation("UI/EarnItem")}{shopData.Name}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateAchievement(int score)
|
private bool UpdateAchievement()
|
||||||
{
|
{
|
||||||
var placeData = GetCurrentAchievement(sortedPlaceDataListByNeedScore, score, true);
|
var placeData = GetCurrentAchievement(sortedPlaceDataListByNeedScore, true);
|
||||||
if (placeData is null)
|
if (placeData is null)
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
SetAchievement(placeData);
|
SetAchievement(placeData);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ScrollGamePlaceData GetCurrentAchievement(ScrollGamePlaceData[] placeDataList, int score, bool sorted = false)
|
private static ScrollGamePlaceData GetCurrentAchievement(IEnumerable<ScrollGamePlaceData> placeDataList, bool sorted = false)
|
||||||
{
|
{
|
||||||
if (sorted)
|
if (!sorted)
|
||||||
{
|
{
|
||||||
return placeDataList.FirstOrDefault(data => data.itemId == 0 && data.NeedScore > score);
|
placeDataList = placeDataList.OrderBy(data => data.NeedScore);
|
||||||
}
|
}
|
||||||
return placeDataList.OrderBy(data => data.NeedScore).FirstOrDefault(data => data.itemId == 0 && data.NeedScore > score);
|
|
||||||
|
var productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);
|
||||||
|
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
||||||
|
|
||||||
|
foreach (var placeData in placeDataList)
|
||||||
|
{
|
||||||
|
if (placeData.recipeId != 0 && !GameDataManager.GameData.MyRecipes.Contains(placeData.recipeId))
|
||||||
|
{
|
||||||
|
if (productDataList.Exists(data => data.id == placeData.recipeId))
|
||||||
|
{
|
||||||
|
return placeData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (placeData.customizeId != 0 && !GameDataManager.GameData.ShopCustomizeMyItems.Contains(placeData.customizeId))
|
||||||
|
{
|
||||||
|
if (customizeDataList.Exists(data => data.id == placeData.customizeId))
|
||||||
|
{
|
||||||
|
return placeData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetAchievement(ScrollGamePlaceData placeData)
|
private void SetAchievement(ScrollGamePlaceData placeData)
|
||||||
|
|
@ -67,7 +89,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
||||||
if (placeData.recipeId != 0)
|
if (placeData.recipeId != 0)
|
||||||
{
|
{
|
||||||
var productData = productDataList.FirstOrDefault(data => data.id == placeData.recipeId);
|
var productData = productDataList.First(data => data.id == placeData.recipeId);
|
||||||
SetAchievementText(productData.Name, placeData.NeedScore);
|
SetAchievementText(productData.Name, placeData.NeedScore);
|
||||||
var rt = recipeObject.transform;
|
var rt = recipeObject.transform;
|
||||||
rt.DestroyAllChildrens();
|
rt.DestroyAllChildrens();
|
||||||
|
|
@ -75,7 +97,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
}
|
}
|
||||||
else if (placeData.customizeId != 0)
|
else if (placeData.customizeId != 0)
|
||||||
{
|
{
|
||||||
var customizeData = customizeDataList.FirstOrDefault(data => data.id == placeData.customizeId);
|
var customizeData = customizeDataList.First(data => data.id == placeData.customizeId);
|
||||||
SetAchievementText(customizeData.Name, placeData.NeedScore);
|
SetAchievementText(customizeData.Name, placeData.NeedScore);
|
||||||
var ct = customizeObject.transform;
|
var ct = customizeObject.transform;
|
||||||
ct.DestroyAllChildrens();
|
ct.DestroyAllChildrens();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue