監視する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>
{
[SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f);
private IObservable<int> heartObserver;
public IObservable<int> Heart => heartObserver;
private readonly Subject<int> heartObserver = new Subject<int>();
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<int> SceneCounter => sceneCounter;
public IObservable<bool> ShopLevelUpdate;
public IObservable<bool> ShopLevelUpdate { get; private set; }
private void Start()
{
checkInterval.AddTo(this);
updateMissionAchieved.AddTo(this);
var levelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet);
heartObserver = checkInterval
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => GameDataManager.GameData.Heart)
.DistinctUntilChanged())
.Switch();
checkInterval.Select(x => Observable.Interval(TimeSpan.FromSeconds(x))).Switch().Subscribe(_ =>
{
var gameData = GameDataManager.GameData;
heartObserver.OnNext(gameData.Heart);
sceneCounter.OnNext(UnityEngine.SceneManagement.SceneManager.sceneCount);
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
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => GameDataManager.GameData.ViewedShopLevel)
.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)
ShopLevelUpdate = Observable.CombineLatest(
heartObserver.DistinctUntilChanged(),
sceneCounter.DistinctUntilChanged().Delay(TimeSpan.FromSeconds(.4f)),
(heart, sceneCount) =>
{
return false;
}
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
return currentLevel > level && sceneCount == 1;
})
var viewedLevel = GameDataManager.GameData.ViewedShopLevel;
if (viewedLevel == 0 && GameDataManager.GameData.isFirstPlay)
{
return false;
}
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
return currentLevel > viewedLevel && sceneCount == 1;
})
.DistinctUntilChanged()
.Publish(false)
.RefCount();