ポップコーン追加処理をリザルトに追加

This commit is contained in:
kimura 2021-09-22 12:49:30 +09:00
parent 3609559016
commit 9b724cf874
4 changed files with 58 additions and 65 deletions

View File

@ -1864,10 +1864,10 @@ RectTransform:
m_Father: {fileID: 357117903}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 116, y: -144}
m_SizeDelta: {x: 300, y: 82}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 508.4, y: -144}
m_SizeDelta: {x: 333.3928, y: 82}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1313878218
MonoBehaviour:
@ -1923,7 +1923,7 @@ MonoBehaviour:
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_HorizontalAlignment: 1
m_VerticalAlignment: 256
m_textAlignment: 65535
m_characterSpacing: 0
@ -12077,6 +12077,7 @@ MonoBehaviour:
popcornImage: {fileID: 977215194}
popcornText: {fileID: 2078519775}
popcornTextPerfect: {fileID: 1906782496}
quantityText: {fileID: 1313878218}
rarityText: {fileID: 1459407280}
rarityView: {fileID: 1086724006}
detailObject: {fileID: 1030818594}

View File

@ -1,4 +1,6 @@
using System;
using System.Linq;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
@ -6,6 +8,7 @@ using UnityEngine.UI;
public class CookingResult : MonoBehaviour
{
private static readonly string RarityTextFormat = "売値 {0}% UP";
private static readonly string QuantityTextFormat = "x{0}";
[SerializeField] private GameObject smokeEffect;
[SerializeField] private GameObject glitterEffect;
[SerializeField] private Button centerOkButton;
@ -15,6 +18,7 @@ public class CookingResult : MonoBehaviour
[SerializeField] private Image popcornImage;
[SerializeField] private Text popcornText;
[SerializeField] private Text popcornTextPerfect;
[SerializeField] private TextMeshProUGUI quantityText;
[SerializeField] private Text rarityText;
[SerializeField] private RarityView rarityView;
[SerializeField] private GameObject detailObject;
@ -28,9 +32,9 @@ public class CookingResult : MonoBehaviour
{
var (recipe, rarityData, resultData, successAction) = LocalCacheManager.Load<(RecipeData, RarityData, CornResult, Action)>(PopcornGameManager.CookingResultDataTag);
var result = new ReactiveProperty<CornResult>(resultData).AddTo(this);
SetData(recipe, rarityData);
result.Subscribe(r =>
{
SetData(recipe, rarityData);
SetUI(r);
if (r != CornResult.Failure)
{
@ -42,6 +46,13 @@ public class CookingResult : MonoBehaviour
centerOkButton.OnClickAsObservable().Subscribe(_ =>
{
// 獲得、遷移
AddStock(recipe, rarityData.Rarity);
TransitionManager.Instance.LoadScene(GameScenes.Main);
}).AddTo(this);
leftOkButton.OnClickAsObservable().Subscribe(_ =>
{
// 獲得、遷移
AddStock(recipe);
TransitionManager.Instance.LoadScene(GameScenes.Main);
}).AddTo(this);
perfectButton.OnClickAsObservable().Subscribe(_ =>
@ -49,11 +60,6 @@ public class CookingResult : MonoBehaviour
// 広告視聴後、結果上書き
result.Value = CornResult.Perfect;
}).AddTo(this);
leftOkButton.OnClickAsObservable().Subscribe(_ =>
{
// 獲得、遷移
TransitionManager.Instance.LoadScene(GameScenes.Main);
}).AddTo(this);
destructionButton.OnClickAsObservable().Subscribe(_ =>
{
// 遷移
@ -66,6 +72,7 @@ public class CookingResult : MonoBehaviour
// popcornImage
popcornText.text = recipe.Name;
popcornTextPerfect.text = recipe.Name;
quantityText.text = string.Format(QuantityTextFormat, recipe.Volume);
rarityText.text = string.Format(RarityTextFormat, rarity.rate - 100);
rarityView.SetRarity(rarity.Rarity);
}
@ -88,5 +95,40 @@ public class CookingResult : MonoBehaviour
explainObject.SetActive(result == CornResult.Good);
explainWithRarityObject.SetActive(result == CornResult.Perfect);
}
private void AddStock(RecipeData recipe, ProductRarity rarity = ProductRarity.Normal)
{
var gameData = GameDataManager.GameData;
// 店頭の空きに追加
var remain = recipe.Volume;
var shopSpace = Market.ShopStockCount - gameData.ShopStock.Count;
var stockCount = Mathf.Min(shopSpace, remain);
gameData.ShopStock.AddRange(Enumerable.Repeat(recipe.RecipeId, stockCount));
remain -= stockCount;
// 空きのタンクを確認
gameData.StorageTanks
.Where(tank => tank.IsEmpty || tank.FlavorId == recipe.RecipeId && !tank.IsFull)
.Select((tank, i) => (i, space: tank.Capacity - tank.Stock))
.OrderBy(x => x.space)
.ToList()
.ForEach(x =>
{
if (remain == 0)
{
return;
}
// タンクが空ならフレーバー設定
if (gameData.StorageTanks[x.i].IsEmpty)
{
gameData.StorageTanks[x.i].FlavorId = recipe.RecipeId;
}
// タンクに追加
stockCount = Mathf.Min(x.space, remain);
gameData.StorageTanks[x.i].AddStock(rarity, stockCount);
remain -= stockCount;
});
GameDataManager.SaveGameData();
}
}

View File

@ -114,7 +114,6 @@ public class PopcornGameManager : MonoBehaviour
{
var recipe = LocalCacheManager.Load<RecipeData>(CookingDataTag);
LocalCacheManager.Save(CookingResultDataTag, (recipe, new RarityData{id = 5, rate = 120}, result, new Action(() => cornManager.SetCornsActive(false))));
AddStock(recipe);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.CookingResults);
});
}).AddTo(compositeDisposable);
@ -132,55 +131,4 @@ public class PopcornGameManager : MonoBehaviour
state.Value = GameState.Guide;
}
private void AddStock(RecipeData recipe)
{
var gameData = GameDataManager.GameData;
// 店頭の空きに追加
var remain = recipe.Volume;
var shopSpace = Market.ShopStockCount - gameData.ShopStock.Count;
if (shopSpace > 0)
{
var stockCount = Mathf.Min(shopSpace, remain);
for (int i = 0; i < stockCount; i++)
{
gameData.ShopStock.Add(recipe.RecipeId);
}
remain -= stockCount;
}
if (remain == 0)
{
GameDataManager.SaveGameData();
return;
}
// 同じフレーバーのタンクを確認
var index = gameData.StorageTanks.FindIndex(x => x.FlavorId == recipe.RecipeId);
if (index != -1)
{
// 同じフレーバーのタンクの空きに追加
var tank = gameData.StorageTanks[index];
var tankSpace = tank.Capacity - tank.Stock;
if (tankSpace > 0)
{
var stockCount = Mathf.Min(tankSpace, remain);
tank.Stock += stockCount;
gameData.StorageTanks[index] = tank;
remain -= stockCount;
}
}
if (remain == 0)
{
GameDataManager.SaveGameData();
return;
}
// 空のタンクに追加
var emptyTankIndex = gameData.StorageTanks.FindIndex(x => x.Stock == 0);
if (emptyTankIndex != -1)
{
gameData.StorageTanks[emptyTankIndex].FlavorId = recipe.RecipeId;
gameData.StorageTanks[emptyTankIndex].Stock = remain;
GameDataManager.SaveGameData();
return;
}
}
}

View File

@ -14,6 +14,8 @@ public class StorageTank
set => SetStock(ProductRarity.Normal, value);
}
public List<ProductStockData> Stocks = new List<ProductStockData>();
public bool IsEmpty => Stock == 0;
public bool IsFull => Stock == Capacity;
public void SetStock(ProductRarity rarity, int stock)
{
@ -22,8 +24,8 @@ public class StorageTank
public void AddStock(ProductRarity rarity, int stock)
{
var stockData = Stocks.First(x => x.Rarity == rarity);
if (stockData is null)
var stockData = Stocks.FirstOrDefault(x => x.Rarity == rarity);
if (stockData is default(ProductStockData))
{
Stocks.Add(new ProductStockData{FlavorId = FlavorId, Rarity = rarity, Stock = stock});
return;