在庫管理ワールド対応

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