調理前チェック/アイテム消費/調理後アイテム追加追加

This commit is contained in:
kimura 2021-08-06 17:50:29 +09:00
parent 0afa505a56
commit 7b9a13e0a3
2 changed files with 120 additions and 11 deletions

View File

@ -95,7 +95,8 @@ public class PopcornGameManager : MonoBehaviour
this.CallWaitForSeconds(1.2f, () =>
{
SetResult(x);
// 再度画面タップでリセット
AddStock();
// 画面タップで次へ
this.UpdateAsObservable()
.Select(_ => Input.GetMouseButton(0))
.DistinctUntilChanged()
@ -104,7 +105,8 @@ public class PopcornGameManager : MonoBehaviour
.DelaySubscription(TimeSpan.FromSeconds(1f))
.Subscribe(_ =>
{
ResetGame();
// ResetGame();
TransitionManager.Instance.LoadScene(GameScenes.Main);
}).AddTo(compositeDisposable);
});
}).AddTo(compositeDisposable);
@ -162,4 +164,43 @@ public class PopcornGameManager : MonoBehaviour
throw new ArgumentOutOfRangeException(nameof(result), result, null);
}
}
private void AddStock()
{
var recipe = LocalCacheManager.Load<RecipeData>(RecipeDetailView.DetailRecipeTag);
var gameData = GameDataManager.GameData;
// 店頭の空きに追加
if (21 >= gameData.ShopStock.Count + recipe.Volume)
{
for (int i = 0; i < recipe.Volume; i++)
{
gameData.ShopStock.Add(recipe.RecipeId);
}
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 = recipe.Volume;
GameDataManager.SaveGameData();
return;
}
// 同じフレーバーのタンクを確認
var index = gameData.StorageTanks.FindIndex(x => x.FlavorId == recipe.RecipeId);
if (index != -1)
{
// 同じフレーバーのタンクの空きに追加
var tank = gameData.StorageTanks[index];
if (tank.Capacity >= tank.Stock + recipe.Volume)
{
tank.Stock += recipe.Volume;
gameData.StorageTanks[index] = tank;
GameDataManager.SaveGameData();
return;
}
}
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.Linq;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
@ -42,7 +43,21 @@ public class RecipeDetailView : MonoBehaviour
{
nextButton.OnClickAsObservable().Subscribe(_ =>
{
var gameData = GameDataManager.GameData;
gameData.cornSeed -= data.CornAmount;
var flavorIndex1 = gameData.Material.FindIndex(x => x.id == data.Flavors[0].id);
var stockMaterial1 = gameData.Material[flavorIndex1];
stockMaterial1.amount -= data.Flavors[0].amount;
gameData.Material[flavorIndex1] = stockMaterial1;
if (data.Flavors.Count == 2)
{
var flavorIndex2 = gameData.Material.FindIndex(x => x.id == data.Flavors[0].id);
var stockMaterial2 = gameData.Material[flavorIndex2];
stockMaterial2.amount -= data.Flavors[0].amount;
gameData.Material[flavorIndex2] = stockMaterial2;
}
GameDataManager.SaveGameData();
TransitionManager.Instance.LoadScene(GameScenes.Cooking);
}).AddTo(this);
}
@ -55,15 +70,34 @@ public class RecipeDetailView : MonoBehaviour
public void SetRecipe(RecipeData data)
{
var gameData = GameDataManager.GameData;
flavorStock.text = string.Format(flavorStockFormat, 9999);
// 在庫
// 店頭の空きがない
var shopStock = gameData.ShopStock.FindAll(x => x == data.RecipeId).Count;
var tankStock = gameData.StorageTanks.FindAll(x => x.FlavorId == data.RecipeId).Sum(x => x.Stock);
flavorStock.text = string.Format(flavorStockFormat, shopStock + tankStock);
flavorName.text = data.Name;
flavorPrice.text = data.Price.ToString();
cornAmountText.text = string.Format(cornAmountFormat, gameData.cornSeed, data.CornAmount);
flavor1AmountText.text = string.Format(flavorAmountFormat, 999, data.Flavors[0].amount);
var flavor1Amount = 0;
var flavorIndex1 = gameData.Material.FindIndex(x => x.id == data.Flavors[0].id);
if (flavorIndex1 != -1)
{
flavor1Amount = gameData.Material[flavorIndex1].amount;
}
flavor1AmountText.text = string.Format(flavorAmountFormat, flavor1Amount, data.Flavors[0].amount);
var flavor2Amount = 0;
if (data.Flavors.Count == 2)
{
var flavorIndex2 = gameData.Material.FindIndex(x => x.id == data.Flavors[0].id);
if (flavorIndex2 != -1)
{
flavor2Amount = gameData.Material[flavorIndex2].amount;
}
flavor2View.SetActive(true);
flavor2AmountText.text = string.Format(flavorAmountFormat, 0, data.Flavors[1].amount);
flavor2AmountText.text = string.Format(flavorAmountFormat, flavor2Amount, data.Flavors[1].amount);
}
else
{
@ -80,16 +114,50 @@ public class RecipeDetailView : MonoBehaviour
flag = false;
cornAmountText.color = Color.red;
}
if (999 < data.Flavors[0].amount)
var flavorIndex1 = gameData.Material.FindIndex(x => x.id == data.Flavors[0].id);
if (flavorIndex1 == -1 || gameData.Material[flavorIndex1].amount < data.Flavors[0].amount)
{
flag = false;
flavor1AmountText.color = Color.red;
}
if (data.Flavors.Count == 2 && 0 < data.Flavors[1].amount)
if (data.Flavors.Count == 2)
{
flag = false;
flavor2AmountText.color = Color.red;
var flavorIndex2 = gameData.Material.FindIndex(x => x.id == data.Flavors[1].id);
if (flavorIndex2 == -1 || gameData.Material[flavorIndex2].amount < data.Flavors[1].amount)
{
flag = false;
flavor2AmountText.color = Color.red;
}
}
return flag;
if (!flag)
{
return false;
}
// 店頭の空きがない
// 店頭の空きに追加
if (21 >= gameData.ShopStock.Count + data.Volume)
{
return true;
}
// 空のタンクに追加
if (gameData.StorageTanks.FindIndex(x => x.Stock == 0) != -1)
{
return true;
}
// 同じフレーバーのタンクを確認
var index = gameData.StorageTanks.FindIndex(x => x.FlavorId == data.RecipeId);
if (index != -1)
{
// 同じフレーバーのタンクの空きに追加
var tank = gameData.StorageTanks[index];
if (tank.Capacity >= tank.Stock + data.Volume)
{
return true;
}
}
return false;
}
}