ミニゲーム報酬表示改善
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 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)
|
||||
|
|
@ -131,33 +130,55 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
{
|
||||
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.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);
|
||||
if (gameData.ShopCustomizeMyItems.Contains(placeData.customizeId))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var customizeData = customizeDataList.FirstOrDefault(data => data.id == placeData.customizeId);
|
||||
if (customizeData is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ShopCustomize.GetItem(customizeData);
|
||||
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
|
||||
}
|
||||
}
|
||||
|
||||
var nextAchievement = sortedPlaceList.FirstOrDefault(data => data.NeedScore > placeScoreData.Score);
|
||||
if (nextAchievement != null)
|
||||
// 前回獲得時の必要スコアを取得
|
||||
var prevNeedScore = sortedPlaceList.LastOrDefault(data => data.NeedScore < progressList[0].needScore)?.NeedScore ?? 0;
|
||||
|
||||
foreach (var placeData in sortedPlaceList.Where(data => data.NeedScore > placeScoreData.Score))
|
||||
{
|
||||
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);
|
||||
// progressList.Add((shopData.Name, shopData.GetPrefab(), nextAchievement.NeedScore, true));
|
||||
progressList.Add((shopData.Name, recipeMalaImagePrefab, nextAchievement.NeedScore, true));
|
||||
var shopData = shopDataList.FirstOrDefault(data => data.itemId == placeData.recipeId && data.Category == ItemCategory.Recipe);
|
||||
if (shopData is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if (nextAchievement.customizeId != 0)
|
||||
// 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 == nextAchievement.customizeId);
|
||||
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), nextAchievement.NeedScore, false));
|
||||
var customizeData = customizeDataList.FirstOrDefault(data => data.id == placeData.customizeId);
|
||||
if (customizeData is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
progressList.Add((customizeData.Name, customizeData.GetIconPrefab(), placeData.NeedScore, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -171,15 +192,26 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
|
||||
meterObject.SetActive(progressList.Count > 0);
|
||||
var basePlaceScore = prevNeedScore;
|
||||
/*
|
||||
* 進捗を途中表示するための計算
|
||||
* ただしデータ追加などで前回スコアより小さい必要スコアの報酬が存在する場合は
|
||||
* 進捗を0からスタートさせる
|
||||
*/
|
||||
var prevScore = 0;
|
||||
if (basePlaceScore < prevPlaceScore && prevPlaceScore < progressList[0].needScore)
|
||||
{
|
||||
prevScore = prevPlaceScore - basePlaceScore;
|
||||
}
|
||||
|
||||
var nextItemSubject = new Subject<Unit>().AddTo(this);
|
||||
progressList.ToObservable()
|
||||
.Zip(nextItemSubject.StartWith(Unit.Default).Take(progressList.Count), (x, _) => x)
|
||||
.ForEachAsync(x =>
|
||||
{
|
||||
SetSilhouette(x.prefab, x.isRecipe);
|
||||
var prevScore = prevPlaceScore > basePlaceScore ? prevPlaceScore - basePlaceScore : 0;
|
||||
var needScore = x.needScore == basePlaceScore ? 1 : x.needScore - basePlaceScore;
|
||||
var newScore = x.needScore == basePlaceScore ? 1 : placeScoreData.Score - basePlaceScore;
|
||||
// オフセット計算
|
||||
var needScore = x.needScore <= basePlaceScore ? 1 : x.needScore - basePlaceScore;
|
||||
var newScore = x.needScore <= basePlaceScore ? 1 : placeScoreData.Score - basePlaceScore;
|
||||
basePlaceScore = x.needScore;
|
||||
SetProgress((float)prevScore / needScore, false).ToObservable()
|
||||
.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));
|
||||
}).AddTo(this);
|
||||
// 初回のみ0以外の値が入るため・・・
|
||||
prevScore = 0;
|
||||
})
|
||||
.SelectMany(nextItemSubject)
|
||||
.Delay(TimeSpan.FromSeconds(waitButtonActive))
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
private ScrollGamePlaceData[] sortedPlaceDataListByNeedScore;
|
||||
public IObservable<Unit> OnClick => selectButton.OnClickAsObservable().TakeUntilDestroy(this);
|
||||
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}";
|
||||
achievementObject.SetActive(num < sortedPlaceDataListByNeedScore.Max(data => data.NeedScore));
|
||||
UpdateAchievement(num);
|
||||
totalScore.text = $"{LocalizationManager.GetTranslation("UI/TotalScore")}{newScore}";
|
||||
var hasUpdate = UpdateAchievement();
|
||||
achievementObject.SetActive(hasUpdate);
|
||||
}
|
||||
|
||||
public void SetPlaceData(ScrollGamePlaceData[] placeDataList)
|
||||
|
|
@ -40,23 +40,45 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
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)
|
||||
{
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
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)
|
||||
|
|
@ -67,7 +89,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopCustomizeData>(Const.ShopCustomizeDataSheet);
|
||||
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);
|
||||
var rt = recipeObject.transform;
|
||||
rt.DestroyAllChildrens();
|
||||
|
|
@ -75,7 +97,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
}
|
||||
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);
|
||||
var ct = customizeObject.transform;
|
||||
ct.DestroyAllChildrens();
|
||||
|
|
|
|||
Loading…
Reference in New Issue