在庫管理ワールド対応

This commit is contained in:
kimura 2022-10-14 15:31:00 +09:00
parent 712208b9d6
commit fef3ca9223
1 changed files with 34 additions and 33 deletions

View File

@ -26,13 +26,14 @@ public class ProductManagement : MonoBehaviour
state.Value = ManagementState.None;
WorldMarketManager.Instance.IsPause.Value = true;
var gameData = GameDataManager.GameData;
var globalGameData = GameDataManager.GameData;
var cityGameData = GameDataManager.GetCurrentCityGameData();
if (!gameData.FinishedFlags.HasFlag(TutorialFlag.Management))
if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.Management))
{
TutorialManager.Instance.ShowTutorialConversation(9, () =>
{
gameData.FinishedFlags |= TutorialFlag.Management;
globalGameData.FinishedFlags |= TutorialFlag.Management;
GameDataManager.SaveGameData();
});
}
@ -48,15 +49,15 @@ public class ProductManagement : MonoBehaviour
.OrderBy(data => data.number)
.Select(data => data.price).ToList();
CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
CoinManager.Instance.ChangeCoin(cityGameData.Coin);
HeartMeter.Instance.Initialize(globalGameData.ViewedShopLevel, cityGameData.Heart);
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
HeartMeter.Instance.FulledHeart
.DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{
ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
ShopLevelUp.ShowDialog(globalGameData.ViewedShopLevel + 1);
}).AddTo(this);
GameDataObserver.Instance.HeartObserver
@ -68,10 +69,10 @@ public class ProductManagement : MonoBehaviour
}).AddTo(this);
// 補充方法設定
view.SetRefillType(gameData.RefillMode);
view.SetRefillType(cityGameData.RefillMode);
// タンク並び替え
gameData.StorageTanks = gameData.StorageTanks.OrderBy(tank => tank.IsEmpty).ToList();
cityGameData.StorageTanks = cityGameData.StorageTanks.OrderBy(tank => tank.IsEmpty).ToList();
// タンク設定
var tankList = view.SetTanks(priceList);
@ -80,11 +81,11 @@ public class ProductManagement : MonoBehaviour
var shopDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopData>(Const.ShopDataSheet);
foreach (var tankView in tankList)
{
tankView.SetArrow(tankView.TankNumber != 4 && tankView.TankNumber != 7 && tankView.TankNumber != gameData.StorageTanks.Count);
if (tankView.TankNumber > gameData.StorageTanks.Count)
tankView.SetArrow(tankView.TankNumber != 4 && tankView.TankNumber != 7 && tankView.TankNumber != cityGameData.StorageTanks.Count);
if (tankView.TankNumber > cityGameData.StorageTanks.Count)
{
// 価格の一番小さいタンクのみ購入できるようにする
var isSmallest = tankView.TankNumber == gameData.StorageTanks.Count + 1;
var isSmallest = tankView.TankNumber == cityGameData.StorageTanks.Count + 1;
tankView.SetState(isSmallest ? TankState.Lock : TankState.Unavailable);
// タンク購入
var shopData = shopDataList.First(data => data.id == Const.ShopTankId);
@ -101,11 +102,11 @@ public class ProductManagement : MonoBehaviour
void PurchaseAction(int amount)
{
// タンク追加
gameData.StorageTanks.Add(new StorageTank { Capacity = Const.TankCapacity });
tankView.SetData(gameData.StorageTanks[tankView.TankNumber - 1]);
cityGameData.StorageTanks.Add(new StorageTank { Capacity = Const.TankCapacity });
tankView.SetData(cityGameData.StorageTanks[tankView.TankNumber - 1]);
tankView.SetState(TankState.Unlock);
CoinManager.Instance.SubCoin(price);
gameData.Coin = CoinManager.Instance.OwnCoin;
cityGameData.Coin = CoinManager.Instance.OwnCoin;
GameDataManager.SaveGameData();
// 次に大きいタンクの購入ボタンを表示
if (tankView.TankNumber + 1 <= tankList.Count)
@ -121,15 +122,15 @@ public class ProductManagement : MonoBehaviour
}
else
{
tankView.SetData(gameData.StorageTanks[tankView.TankNumber - 1]);
tankView.SetData(cityGameData.StorageTanks[tankView.TankNumber - 1]);
tankView.SetState(TankState.Unlock);
}
tankView.DetailButtonObservable.Subscribe(_ =>
{
state.Value = ManagementState.None;
var tankData = gameData.StorageTanks[tankView.TankNumber - 1];
var shopStock = gameData.ShopStock.Count(data => data.FlavorId == tankData.FlavorId);
var tankStock = gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock);
var tankData = cityGameData.StorageTanks[tankView.TankNumber - 1];
var shopStock = cityGameData.ShopStock.Count(data => data.FlavorId == tankData.FlavorId);
var tankStock = cityGameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock);
var totalStock = shopStock + tankStock;
var productData = productList.FirstOrDefault(data => data.id == tankData.FlavorId);
List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x =>
@ -156,7 +157,7 @@ public class ProductManagement : MonoBehaviour
break;
case ManagementState.Tasting:
// ストックのあるタンクのIndex取得。なければ試食モード中止。
var index = gameData.StorageTanks.FindIndex(tank => !tank.IsEmpty);
var index = cityGameData.StorageTanks.FindIndex(tank => !tank.IsEmpty);
if (index == -1)
{
state.Value = ManagementState.None;
@ -164,7 +165,7 @@ public class ProductManagement : MonoBehaviour
}
// 選択中のタンクにストックがあればIndex更新
var selectedIndex = tankList.FindIndex(tankView => tankView.State.Value == TankState.Selected);
if (selectedIndex != -1 && !gameData.StorageTanks[selectedIndex].IsEmpty)
if (selectedIndex != -1 && !cityGameData.StorageTanks[selectedIndex].IsEmpty)
{
index = selectedIndex;
}
@ -173,14 +174,14 @@ public class ProductManagement : MonoBehaviour
ClearSelectedTank(tankList);
tankList[index].SetState(TankState.Selected);
var tankData = gameData.StorageTanks[index];
var tankData = cityGameData.StorageTanks[index];
selectedTank.Value = (index + 1, productList.FirstOrDefault(data => data.id == tankData.FlavorId));
void TastingAction()
{
state.Value = ManagementState.None;
Tasting(selectedTank.Value.num);
tankList[selectedTank.Value.num - 1].SetData(gameData.StorageTanks[selectedTank.Value.num - 1]);
SetActiveTastingButton(gameData.StorageTanks.Any(tank => !tank.IsEmpty));
tankList[selectedTank.Value.num - 1].SetData(cityGameData.StorageTanks[selectedTank.Value.num - 1]);
SetActiveTastingButton(cityGameData.StorageTanks.Any(tank => !tank.IsEmpty));
}
TastingView.ShowDialog(selectedTank.AsObservable(), () => state.Value = ManagementState.None, TastingAction);
break;
@ -206,7 +207,7 @@ public class ProductManagement : MonoBehaviour
case ManagementState.Replacing:
break;
case ManagementState.Tasting:
var tankData = gameData.StorageTanks[tankView.TankNumber - 1];
var tankData = cityGameData.StorageTanks[tankView.TankNumber - 1];
if (tankData.IsEmpty)
{
break;
@ -233,12 +234,12 @@ public class ProductManagement : MonoBehaviour
{
if (tanks.Previous.TankNumber != tanks.Current.TankNumber)
{
var tmpData = gameData.StorageTanks[tanks.Previous.TankNumber - 1];
gameData.StorageTanks[tanks.Previous.TankNumber - 1] = gameData.StorageTanks[tanks.Current.TankNumber - 1];
gameData.StorageTanks[tanks.Current.TankNumber - 1] = tmpData;
var tmpData = cityGameData.StorageTanks[tanks.Previous.TankNumber - 1];
cityGameData.StorageTanks[tanks.Previous.TankNumber - 1] = cityGameData.StorageTanks[tanks.Current.TankNumber - 1];
cityGameData.StorageTanks[tanks.Current.TankNumber - 1] = tmpData;
// 再設定
tanks.Previous.SetData(gameData.StorageTanks[tanks.Previous.TankNumber - 1]);
tanks.Current.SetData(gameData.StorageTanks[tanks.Current.TankNumber - 1]);
tanks.Previous.SetData(cityGameData.StorageTanks[tanks.Previous.TankNumber - 1]);
tanks.Current.SetData(cityGameData.StorageTanks[tanks.Current.TankNumber - 1]);
GameDataManager.SaveGameData();
}
ClearSelectedTank(tankList);
@ -246,7 +247,7 @@ public class ProductManagement : MonoBehaviour
}).AddTo(this);
// 空以外のタンクが1つでもあれば有効
SetActiveTastingButton(gameData.StorageTanks.Any(tank => !tank.IsEmpty));
SetActiveTastingButton(cityGameData.StorageTanks.Any(tank => !tank.IsEmpty));
// 試食ボタン
tastingButton.OnClickAsObservable().Subscribe(_ =>
{
@ -257,7 +258,7 @@ public class ProductManagement : MonoBehaviour
view.RefillType.Subscribe(mode =>
{
// 補充方法変更
gameData.RefillMode = mode;
cityGameData.RefillMode = mode;
GameDataManager.SaveGameData();
}).AddTo(this);
}
@ -294,8 +295,8 @@ public class ProductManagement : MonoBehaviour
private void Tasting(int tankNumber)
{
// 試食フラグに終了時間を設定
var tank = GameDataManager.GameData.StorageTanks[tankNumber - 1];
GameDataManager.GameData.AddTastingCustomerCount(tank.Stock);
var tank = GameDataManager.GetCurrentCityGameData().StorageTanks[tankNumber - 1];
GameDataManager.GetCurrentCityGameData().AddTastingCustomerCount(tank.Stock);
tank.ClearStock();
GameDataManager.SaveGameData();
BrotherPinkView.Instance.StartTasting();