ボーナス反映処理追加

This commit is contained in:
kimura 2022-05-16 18:47:02 +09:00
parent 65c5dc31af
commit c13c5ee529
2 changed files with 27 additions and 9 deletions

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using UniRx; using UniRx;
using UnityEngine; using UnityEngine;
@ -19,7 +20,8 @@ public class CustomerFlow : MonoBehaviour
private IObservable<CustomerType> vipCustomerObservable; private IObservable<CustomerType> vipCustomerObservable;
private readonly Subject<IObservable<Unit>> vipCustomerSubject = new Subject<IObservable<Unit>>(); private readonly Subject<IObservable<Unit>> vipCustomerSubject = new Subject<IObservable<Unit>>();
private IObservable<CustomerType> tastingCustomerObservable; private IObservable<CustomerType> tastingCustomerObservable;
private static readonly float checkHeartInterval = 1f; private static readonly float CheckHeartInterval = 1f;
private static readonly float TenMinutes = 60f * 10;
[Header("1分間あたりの歩行者数")] [Header("1分間あたりの歩行者数")]
[SerializeField] private float walkerInterval = 60f / 6; [SerializeField] private float walkerInterval = 60f / 6;
@ -39,6 +41,9 @@ public class CustomerFlow : MonoBehaviour
public float TastingCustomerInterval => tastingCustomerInterval; public float TastingCustomerInterval => tastingCustomerInterval;
private int adActiveCount = 0; private int adActiveCount = 0;
// bonus
private int customerBonus;
private int adWalkerBonus;
public IObservable<CustomerType> Flow => walkerObservable.Merge(customerObservable, adWalkerObservable, vipCustomerObservable, tastingCustomerObservable); public IObservable<CustomerType> Flow => walkerObservable.Merge(customerObservable, adWalkerObservable, vipCustomerObservable, tastingCustomerObservable);
@ -49,17 +54,15 @@ public class CustomerFlow : MonoBehaviour
var shopLevelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet); var shopLevelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet);
shopLevelList = shopLevelList.Where(data => data.shopLevel != Const.SpecialShopLevel).ToList(); shopLevelList = shopLevelList.Where(data => data.shopLevel != Const.SpecialShopLevel).ToList();
// 10分間期待値を来客の間隔に変換
var intervalList = shopLevelList.Select(shopLevel => (heart: shopLevel.heart, interval: 60f * 10 / shopLevel.customer));
// 1秒間隔でハートを確認 // 1秒間隔でハートを確認
var changeCustomerFlowObservable = Observable.Interval(TimeSpan.FromSeconds(checkHeartInterval)) var changeCustomerFlowObservable = Observable.Interval(TimeSpan.FromSeconds(CheckHeartInterval))
.Select(_ => GameDataManager.GameData.Heart) .Select(_ => GameDataManager.GameData.Heart);
.DistinctUntilChanged()
.Select(heart => intervalList.Last(x => x.heart <= heart).interval);
// お客さん出現タイマー // お客さん出現タイマー
customerObservable = changeCustomerFlowObservable customerObservable = changeCustomerFlowObservable
.DistinctUntilChanged()
.Select(heart => TenMinutes / (shopLevelList.Last(x => x.heart <= heart).customer + customerBonus)) // 10分間期待値を来客の間隔に変換
.DistinctUntilChanged() .DistinctUntilChanged()
// .Do(x => Debug.Log($"changeInterval:{x}")) // .Do(x => Debug.Log($"changeInterval:{x}"))
.Select(customerInterval => Observable.Interval(TimeSpan.FromSeconds(customerInterval))) .Select(customerInterval => Observable.Interval(TimeSpan.FromSeconds(customerInterval)))
@ -121,7 +124,7 @@ public class CustomerFlow : MonoBehaviour
private IObservable<Unit> AdWalkerTimer() private IObservable<Unit> AdWalkerTimer()
{ {
return Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(adWalkerDuration/adWalkerCount)) return Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(adWalkerDuration/(adWalkerCount + adWalkerBonus)))
.Take(TimeSpan.FromSeconds(adWalkerDuration)) .Take(TimeSpan.FromSeconds(adWalkerDuration))
.AsUnitObservable(); .AsUnitObservable();
} }
@ -132,4 +135,10 @@ public class CustomerFlow : MonoBehaviour
.Take(vipCustomerCount) .Take(vipCustomerCount)
.AsUnitObservable()); .AsUnitObservable());
} }
public void UpdateBonus(Dictionary<ShopCustomizeBonusCategory, (int bonusLevel, int value)> bonusList)
{
customerBonus = bonusList[ShopCustomizeBonusCategory.Customer].value;
adWalkerBonus = bonusList[ShopCustomizeBonusCategory.AdWalker].value;
}
} }

View File

@ -61,6 +61,7 @@ public class Market : SingletonMonoBehaviour<Market>
private int orderIndex; private int orderIndex;
private int oneByOneIndex = 0; private int oneByOneIndex = 0;
private int salesBonus = 0;
private GameData gameData; private GameData gameData;
// Start is called before the first frame update // Start is called before the first frame update
@ -442,6 +443,7 @@ public class Market : SingletonMonoBehaviour<Market>
gameData.ShopStock.RemoveAt(targetIndex); gameData.ShopStock.RemoveAt(targetIndex);
gameData.AddSalesCount(stockData.FlavorId, 1, stockData.Rarity); gameData.AddSalesCount(stockData.FlavorId, 1, stockData.Rarity);
coin += productData.GetRarityPrice(rarityData.Rarity); coin += productData.GetRarityPrice(rarityData.Rarity);
coin += salesBonus;
} }
return coin; return coin;
} }
@ -562,6 +564,13 @@ public class Market : SingletonMonoBehaviour<Market>
customerFlow.StartVip(); customerFlow.StartVip();
} }
public void UpdateBonus(Dictionary<ShopCustomizeBonusCategory, (int bonusLevel, int value)> bonusList)
{
// sales
salesBonus = bonusList[ShopCustomizeBonusCategory.Sales].value;
customerFlow.UpdateBonus(bonusList);
}
public CustomerController SetTutorialCustomer() public CustomerController SetTutorialCustomer()
{ {
var customerController = SpawnCustomer(); var customerController = SpawnCustomer();