Merge branch 'develop' of bitbucket.org:usaya/popcorn into develop
This commit is contained in:
commit
136721c3fb
|
|
@ -680,6 +680,18 @@ RectTransform:
|
|||
type: 3}
|
||||
m_PrefabInstance: {fileID: 219610911}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &219610916 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 3664916832512110619, guid: caaa748dbeed576499e8cae74d33f689,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 219610911}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 351b4ffae35e149bf81549887561d561, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &493087540
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -984,6 +996,7 @@ GameObject:
|
|||
m_Component:
|
||||
- component: {fileID: 586451195}
|
||||
- component: {fileID: 586451196}
|
||||
- component: {fileID: 586451197}
|
||||
m_Layer: 0
|
||||
m_Name: Manager
|
||||
m_TagString: Untagged
|
||||
|
|
@ -1019,6 +1032,24 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
tastingButton: {fileID: 1280872481}
|
||||
view: {fileID: 639967259}
|
||||
--- !u!114 &586451197
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 586451194}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 60b7ac089a534e549c0e25a89b113261, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
coinIconTransform: {fileID: 0}
|
||||
coinCountText: {fileID: 219610916}
|
||||
coinAnimator: {fileID: 0}
|
||||
coinPrefab: {fileID: 0}
|
||||
duration: 0.5
|
||||
rootTransform: {fileID: 0}
|
||||
--- !u!1 &613202084
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
|||
|
|
@ -22,36 +22,12 @@ public class ProductManagement : MonoBehaviour
|
|||
state.AddTo(this);
|
||||
state.Value = ManagementState.None;
|
||||
var gameData = GameDataManager.GameData;
|
||||
// CoinManager.Instance.ChangeCoin(gameData.coin);
|
||||
|
||||
// タンクデータ読み込み
|
||||
gameData.StorageTanks = new List<StorageTank>
|
||||
{
|
||||
new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}},
|
||||
new StorageTank(){Id = 2, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>
|
||||
{
|
||||
new ProductStockData{Rarity = ProductRarity.Normal, Stock = 1},
|
||||
new ProductStockData{Rarity = ProductRarity.Yellow, Stock = 20},
|
||||
new ProductStockData{Rarity = ProductRarity.Copper, Stock = 1},
|
||||
new ProductStockData{Rarity = ProductRarity.Rainbow, Stock = 10},
|
||||
}},
|
||||
// new StorageTank(){Id = 3, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Yellow, Stock = 2}}},
|
||||
new StorageTank(){Id = 5, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Gold, Stock = 4}}},
|
||||
};
|
||||
CoinManager.Instance.ChangeCoin(gameData.coin);
|
||||
HeartMeter.Instance.SetHeart(gameData.Heart);
|
||||
|
||||
// 補充方法設定
|
||||
view.SetRefillType(gameData.RefillMode);
|
||||
// TankOrderを更新
|
||||
Debug.Log(gameData.TankOrder.Aggregate(new StringBuilder(), (builder, i) => builder.Append(i)).ToString());
|
||||
if (gameData.TankOrder.Length != gameData.StorageTanks.Count)
|
||||
{
|
||||
var excepts = gameData.StorageTanks.Select(x => x.Id).Except(gameData.TankOrder);
|
||||
Debug.Log(excepts.Aggregate("", (s, i) => $"{s},{i}"));
|
||||
var tmpTankOrder = gameData.TankOrder.ToList();
|
||||
tmpTankOrder.AddRange(excepts);
|
||||
gameData.TankOrder = tmpTankOrder.ToArray();
|
||||
Debug.Log(gameData.TankOrder.Aggregate("", (s, i) => $"{s},{i}"));
|
||||
}
|
||||
|
||||
// tank price list
|
||||
var priceList = new List<int>
|
||||
{
|
||||
|
|
@ -63,6 +39,25 @@ public class ProductManagement : MonoBehaviour
|
|||
2000,
|
||||
2500,
|
||||
};
|
||||
// タンクデータ読み込み
|
||||
gameData.StorageTanks = new List<StorageTank>
|
||||
{
|
||||
new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}},
|
||||
new StorageTank(){Id = 2, Capacity = 50, FlavorId = 2, Stocks = new List<ProductStockData>
|
||||
{
|
||||
new ProductStockData{Rarity = ProductRarity.Normal, Stock = 1},
|
||||
new ProductStockData{Rarity = ProductRarity.Yellow, Stock = 20},
|
||||
}},
|
||||
new StorageTank(){Id = 3, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>
|
||||
{
|
||||
new ProductStockData{Rarity = ProductRarity.Copper, Stock = 1},
|
||||
new ProductStockData{Rarity = ProductRarity.Silver, Stock = 5},
|
||||
new ProductStockData{Rarity = ProductRarity.Gold, Stock = 10},
|
||||
new ProductStockData{Rarity = ProductRarity.Rainbow, Stock = 20},
|
||||
}},
|
||||
new StorageTank(){Id = 4, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Gold, Stock = 4}}},
|
||||
};
|
||||
|
||||
// タンク設定
|
||||
var tankList = view.SetTanks(priceList);
|
||||
var rarityDataList = SpreadsheetDataManager.Instance.GetBaseDataList<RarityData>(Const.RarityDataSheet);
|
||||
|
|
@ -71,60 +66,104 @@ public class ProductManagement : MonoBehaviour
|
|||
tankView.SetArrow(tankView.TankNumber != 4 && tankView.TankNumber != 7 && tankView.TankNumber != gameData.StorageTanks.Count);
|
||||
if (tankView.TankNumber > gameData.StorageTanks.Count)
|
||||
{
|
||||
tankView.SetState(TankState.Lock);
|
||||
// 価格の一番小さいタンクのみ購入できるようにする
|
||||
if (tankView.TankNumber == gameData.StorageTanks.Count + 1)
|
||||
{
|
||||
tankView.SetState(TankState.Lock);
|
||||
}
|
||||
else
|
||||
{
|
||||
tankView.SetState(TankState.Unavailable);
|
||||
}
|
||||
// タンク購入
|
||||
var shopData = new ShopData
|
||||
{
|
||||
nameId = 0,
|
||||
name = "タンク",
|
||||
price = priceList[tankView.TankNumber - 1],
|
||||
text = "ポップコーンを保存する容器",
|
||||
category = 3,
|
||||
consumeType = 2,
|
||||
prefabName = ""
|
||||
};
|
||||
tankView.PurchaseButtonObservable
|
||||
.Where(_ => shopData.price <= CoinManager.Instance.OwnCoin)
|
||||
.TakeWhile(_ => tankView.State.Value == TankState.Lock || tankView.State.Value == TankState.Unavailable)
|
||||
.Subscribe(_ =>
|
||||
{
|
||||
var price = priceList[tankView.TankNumber - 1];
|
||||
// 購入処理
|
||||
// タンク追加&Order追加
|
||||
tankView.SetData(gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankView.TankNumber - 1]));
|
||||
Action<int> purchaseAction = amount =>
|
||||
{
|
||||
// タンク追加
|
||||
gameData.StorageTanks.Add(new StorageTank() {Id = tankView.TankNumber, Capacity = 50});
|
||||
tankView.SetData(gameData.StorageTanks[tankView.TankNumber - 1]);
|
||||
tankView.SetState(TankState.Unlock);
|
||||
CoinManager.Instance.SubCoin(shopData.price);
|
||||
gameData.coin = CoinManager.Instance.OwnCoin;
|
||||
GameDataManager.SaveGameData();
|
||||
// 次に大きいタンクの購入ボタンを表示
|
||||
if (tankView.TankNumber + 1 <= tankList.Count)
|
||||
{
|
||||
tankList[tankView.TankNumber].SetState(TankState.Lock);
|
||||
}
|
||||
};
|
||||
LocalCacheManager.Save(ShopItemPurchaseView.ItemPurchaseTag, (shopData, 0, purchaseAction));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Purchase);
|
||||
}).AddTo(tankView);
|
||||
}
|
||||
else
|
||||
{
|
||||
var tankData = gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankView.TankNumber - 1]);
|
||||
tankView.SetData(tankData);
|
||||
tankView.SetData(gameData.StorageTanks[tankView.TankNumber - 1]);
|
||||
tankView.SetState(TankState.Unlock);
|
||||
}
|
||||
tankView.DetailButtonObservable.Subscribe(_ =>
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
var tankData = gameData.StorageTanks[tankView.TankNumber - 1];
|
||||
var totalStock = gameData.ShopStock.Sum(x => x) + gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock);
|
||||
var recipe = RecipeData.GetRecipe(tankData.FlavorId);
|
||||
var price = recipe?.Price ?? 0;
|
||||
List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x =>
|
||||
(x.Rarity, price * x.rate / 100, tankData.Stocks.FirstOrDefault(sd => sd.Rarity == x.Rarity)?.Stock ?? 0)
|
||||
).ToList();
|
||||
tankView.DetailButtonObservable.Subscribe(_ =>
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
LocalCacheManager.Save(TankDetailView.TankDetailDataTag, (tankView.TankNumber, totalStock, tankData, recipe, raritySummaryData));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.PopcornDescription);
|
||||
}).AddTo(tankView);
|
||||
}
|
||||
LocalCacheManager.Save(TankDetailView.TankDetailDataTag, (tankView.TankNumber, totalStock, tankData, recipe, raritySummaryData));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.PopcornDescription);
|
||||
}).AddTo(tankView);
|
||||
state.Subscribe(x =>
|
||||
{
|
||||
tankView.SetDetailButtonActive(x != ManagementState.Tasting);
|
||||
}).AddTo(tankView);
|
||||
}
|
||||
|
||||
var selectedTankSubject = new Subject<(int num, RecipeData recipe)>().AddTo(this);
|
||||
var selectedTankObservable = selectedTankSubject.AsObservable();
|
||||
var selectedTank = new ReactiveProperty<(int num, RecipeData recipe)>().AddTo(this);
|
||||
state.Subscribe(mState =>
|
||||
{
|
||||
switch (mState)
|
||||
{
|
||||
case ManagementState.None:
|
||||
ChangeAllTankInteractable(tankList, true);
|
||||
ClearSelectedTank(tankList);
|
||||
break;
|
||||
case ManagementState.Replacing:
|
||||
break;
|
||||
case ManagementState.Tasting:
|
||||
// 1番目選択
|
||||
// 空以外のタンクを選択
|
||||
var index = gameData.StorageTanks.FindIndex(tank => tank.Stock > 0);
|
||||
if (index == -1)
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
return;
|
||||
}
|
||||
ChangeAllTankInteractable(tankList, false);
|
||||
ClearSelectedTank(tankList);
|
||||
tankList[0].SetState(TankState.Selected);
|
||||
var tankData = gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankList[0].TankNumber - 1]);
|
||||
selectedTankSubject.OnNext((1, RecipeData.GetRecipe(tankData.FlavorId)));
|
||||
LocalCacheManager.Save(TastingView.TastingDataTag, (selectedTankObservable, new Action(() => state.Value = ManagementState.None), new Action<int>(Tasting)));
|
||||
tankList[index].SetState(TankState.Selected);
|
||||
var tankData = gameData.StorageTanks[index];
|
||||
selectedTank.Value = (tankList[index].TankNumber, RecipeData.GetRecipe(tankData.FlavorId));
|
||||
Action tastingAction = () =>
|
||||
{
|
||||
Tasting(selectedTank.Value.num);
|
||||
tankList[selectedTank.Value.num - 1].SetData(gameData.StorageTanks[selectedTank.Value.num - 1]);
|
||||
};
|
||||
LocalCacheManager.Save(TastingView.TastingDataTag, (selectedTank.AsObservable(), new Action(() => state.Value = ManagementState.None), tastingAction));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Tasting);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -148,10 +187,14 @@ public class ProductManagement : MonoBehaviour
|
|||
case ManagementState.Replacing:
|
||||
break;
|
||||
case ManagementState.Tasting:
|
||||
if (gameData.StorageTanks[tankView.TankNumber - 1].Stock == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
ClearSelectedTank(tankList);
|
||||
tankView.SetState(TankState.Selected);
|
||||
var tankData = gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankView.TankNumber - 1]);
|
||||
selectedTankSubject.OnNext((tankView.TankNumber, RecipeData.GetRecipe(tankData.FlavorId)));
|
||||
var tankData = gameData.StorageTanks[tankView.TankNumber - 1];
|
||||
selectedTank.Value = (tankView.TankNumber, RecipeData.GetRecipe(tankData.FlavorId));
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
|
|
@ -172,12 +215,12 @@ public class ProductManagement : MonoBehaviour
|
|||
{
|
||||
if (tanks.Previous.TankNumber != tanks.Current.TankNumber)
|
||||
{
|
||||
var tmpId = gameData.TankOrder[tanks.Previous.TankNumber - 1];
|
||||
gameData.TankOrder[tanks.Previous.TankNumber - 1] = gameData.TankOrder[tanks.Current.TankNumber - 1];
|
||||
gameData.TankOrder[tanks.Current.TankNumber - 1] = tmpId;
|
||||
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;
|
||||
// 再設定
|
||||
tanks.Previous.SetData(gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tanks.Previous.TankNumber - 1]));
|
||||
tanks.Current.SetData(gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tanks.Current.TankNumber - 1]));
|
||||
tanks.Previous.SetData(gameData.StorageTanks[tanks.Previous.TankNumber - 1]);
|
||||
tanks.Current.SetData(gameData.StorageTanks[tanks.Current.TankNumber - 1]);
|
||||
GameDataManager.SaveGameData();
|
||||
}
|
||||
state.Value = ManagementState.None;
|
||||
|
|
@ -190,7 +233,10 @@ public class ProductManagement : MonoBehaviour
|
|||
|
||||
view.RefillType.Subscribe(mode =>
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
if (state.Value != ManagementState.Tasting)
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
}
|
||||
// 補充方法変更
|
||||
gameData.RefillMode = mode;
|
||||
GameDataManager.SaveGameData();
|
||||
|
|
@ -208,9 +254,21 @@ public class ProductManagement : MonoBehaviour
|
|||
}
|
||||
}
|
||||
|
||||
private void ChangeAllTankInteractable(List<ProductManagementTankView> tankList, bool active)
|
||||
{
|
||||
foreach (var tankView in tankList)
|
||||
{
|
||||
if (tankView.State.Value == TankState.Lock)
|
||||
{
|
||||
tankView.SetPurchaseButtonActive(active);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Tasting(int tankNumber)
|
||||
{
|
||||
state.Value = ManagementState.None;
|
||||
Debug.Log($"tasting:{tankNumber}");
|
||||
GameDataManager.GameData.StorageTanks[tankNumber - 1].ClearStock();
|
||||
// 試食フラグに終了時間を設定
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,4 +101,9 @@ public class ProductManagementTankView : MonoBehaviour
|
|||
{
|
||||
detailButtonActive.Value = active;
|
||||
}
|
||||
|
||||
public void SetPurchaseButtonActive(bool active)
|
||||
{
|
||||
purchaseButton.interactable = active;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,11 @@ public class StorageTank
|
|||
}
|
||||
stockData.Stock += stock;
|
||||
}
|
||||
|
||||
public void ClearStock()
|
||||
{
|
||||
Stocks.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public class ProductStockData
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ public class TastingView : MonoBehaviour
|
|||
|
||||
private void Start()
|
||||
{
|
||||
var data = LocalCacheManager.Load<(IObservable<(int tankNum, RecipeData recipe)> selectedObservable, Action closeButtonAction, Action<int> tastingButtonAction)>(TastingDataTag);
|
||||
var data = LocalCacheManager.Load<(IObservable<(int tankNum, RecipeData recipe)> selectedObservable, Action closeButtonAction, Action tastingButtonAction)>(TastingDataTag);
|
||||
data.selectedObservable.Subscribe(x =>
|
||||
{
|
||||
popcornName.text = x.recipe.Name;
|
||||
|
|
@ -26,18 +26,18 @@ public class TastingView : MonoBehaviour
|
|||
closeButton.OnClickAsObservable().Subscribe(_ =>
|
||||
{
|
||||
backgroundAnimator.SetTrigger(CloseTrigger);
|
||||
this.CallWaitForSeconds(.25f, () =>
|
||||
this.CallWaitForSeconds(.5f, () =>
|
||||
{
|
||||
data.closeButtonAction?.Invoke();
|
||||
TransitionManager.Instance.UnloadScene(GameScenes.Tasting);
|
||||
});
|
||||
}).AddTo(this);
|
||||
tastingButton.OnClickAsObservable().WithLatestFrom(data.selectedObservable, (_, x) => x.tankNum).Subscribe(tankNum =>
|
||||
tastingButton.OnClickAsObservable().Subscribe(_ =>
|
||||
{
|
||||
backgroundAnimator.SetTrigger(CloseTrigger);
|
||||
this.CallWaitForSeconds(.25f, () =>
|
||||
this.CallWaitForSeconds(.5f, () =>
|
||||
{
|
||||
data.tastingButtonAction?.Invoke(tankNum);
|
||||
data.tastingButtonAction?.Invoke();
|
||||
TransitionManager.Instance.UnloadScene(GameScenes.Tasting);
|
||||
});
|
||||
}).AddTo(this);
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ public sealed class GameData {
|
|||
[DataMember(Name = "Data22")]
|
||||
public int[] Pans;
|
||||
// [DataMember(Name = "Data23")]
|
||||
public int[] TankOrder;
|
||||
[DataMember(Name = "Data24")]
|
||||
public ProductRefillMode RefillMode;
|
||||
// [DataMember(Name = "Data25")]
|
||||
|
|
@ -124,7 +123,6 @@ public sealed class GameData {
|
|||
// lastAdRewardTimeList = lastAdRewardTimeArray == null ? new List<long>() : lastAdRewardTimeArray.ToList();
|
||||
ShopStock = shopStock?.ToList() ?? new List<int>();
|
||||
Pans = Pans ?? new int[0];
|
||||
TankOrder = TankOrder ?? new int[0];
|
||||
}
|
||||
private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){
|
||||
var dictionary = new Dictionary<int, int>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue