監視するGameDataを追加

This commit is contained in:
kimura 2021-10-29 10:30:43 +09:00
parent bcf659bb10
commit dd1aeb7036
1 changed files with 44 additions and 38 deletions

View File

@ -7,52 +7,58 @@ using UnityEngine;
public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver> public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
{ {
[SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f); [SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f);
private IObservable<int> heartObserver; private readonly Subject<int> heartObserver = new Subject<int>();
public IObservable<int> Heart => heartObserver; private readonly Subject<int> sceneCounter = new Subject<int>();
private readonly Subject<int> shopLevelObserver = new Subject<int>();
private readonly Subject<int> achievedMissionObserver = new Subject<int>();
private readonly Subject<int> addCoinObserver = new Subject<int>();
private readonly Subject<int> subCoinObserver = new Subject<int>();
private readonly Subject<int> addCornObserver = new Subject<int>();
private readonly Subject<int> addCustomerObserver = new Subject<int>();
private readonly Subject<int> addSalesObserver = new Subject<int>();
private readonly Subject<int> addRareSalesObserver = new Subject<int>();
private readonly Subject<int> hasRecipeObserver = new Subject<int>();
private readonly Subject<int> deliveredBulkOrderObserver = new Subject<int>();
private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty();
public IReadOnlyReactiveProperty<bool> UpdateMissionAchieved => updateMissionAchieved;
private IObservable<int> sceneCounter; public IObservable<bool> ShopLevelUpdate { get; private set; }
public IObservable<int> SceneCounter => sceneCounter;
public IObservable<bool> ShopLevelUpdate;
private void Start() private void Start()
{ {
checkInterval.AddTo(this); checkInterval.AddTo(this);
updateMissionAchieved.AddTo(this);
var levelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet); var levelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet);
heartObserver = checkInterval checkInterval.Select(x => Observable.Interval(TimeSpan.FromSeconds(x))).Switch().Subscribe(_ =>
.Select(x => {
Observable.Interval(TimeSpan.FromSeconds(x)) var gameData = GameDataManager.GameData;
.Select(_ => GameDataManager.GameData.Heart) heartObserver.OnNext(gameData.Heart);
.DistinctUntilChanged()) sceneCounter.OnNext(UnityEngine.SceneManagement.SceneManager.sceneCount);
.Switch(); shopLevelObserver.OnNext(gameData.ViewedShopLevel);
achievedMissionObserver.OnNext(gameData.AchievedMission.Count);
// addCoinObserver.OnNext(gameData.TotalAddCoin);
subCoinObserver.OnNext(gameData.TotalSubCoin);
addCornObserver.OnNext(gameData.TotalAddCornSeed);
addCustomerObserver.OnNext(gameData.TotalCustomerCount);
addSalesObserver.OnNext(gameData.TotalSales);
addRareSalesObserver.OnNext(gameData.RareTotalSales);
hasRecipeObserver.OnNext(gameData.MyRecipes.Length);
deliveredBulkOrderObserver.OnNext(gameData.BulkOrderDeliveredCount);
}).AddTo(this);
var shopLevelObserver = checkInterval ShopLevelUpdate = Observable.CombineLatest(
.Select(x => heartObserver.DistinctUntilChanged(),
Observable.Interval(TimeSpan.FromSeconds(x)) sceneCounter.DistinctUntilChanged().Delay(TimeSpan.FromSeconds(.4f)),
.Select(_ => GameDataManager.GameData.ViewedShopLevel) (heart, sceneCount) =>
.DistinctUntilChanged())
.Switch();
sceneCounter = checkInterval
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => UnityEngine.SceneManagement.SceneManager.sceneCount)
.DistinctUntilChanged()
.Delay(TimeSpan.FromSeconds(.4f))
// .Do(c => { Debug.Log($"sceneCount:{c}");})
)
.Switch();
ShopLevelUpdate = Observable.CombineLatest(heartObserver, shopLevelObserver, sceneCounter,
(heart, level, sceneCount) =>
{
if (level == 0 && GameDataManager.GameData.isFirstPlay)
{ {
return false; var viewedLevel = GameDataManager.GameData.ViewedShopLevel;
} if (viewedLevel == 0 && GameDataManager.GameData.isFirstPlay)
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1; {
return currentLevel > level && sceneCount == 1; return false;
}) }
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
return currentLevel > viewedLevel && sceneCount == 1;
})
.DistinctUntilChanged() .DistinctUntilChanged()
.Publish(false) .Publish(false)
.RefCount(); .RefCount();