監視するGameDataを追加
This commit is contained in:
parent
bcf659bb10
commit
dd1aeb7036
|
|
@ -7,51 +7,57 @@ 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))
|
|
||||||
.Select(_ => GameDataManager.GameData.Heart)
|
|
||||||
.DistinctUntilChanged())
|
|
||||||
.Switch();
|
|
||||||
|
|
||||||
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)
|
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);
|
||||||
|
|
||||||
|
ShopLevelUpdate = Observable.CombineLatest(
|
||||||
|
heartObserver.DistinctUntilChanged(),
|
||||||
|
sceneCounter.DistinctUntilChanged().Delay(TimeSpan.FromSeconds(.4f)),
|
||||||
|
(heart, sceneCount) =>
|
||||||
|
{
|
||||||
|
var viewedLevel = GameDataManager.GameData.ViewedShopLevel;
|
||||||
|
if (viewedLevel == 0 && GameDataManager.GameData.isFirstPlay)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
|
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
|
||||||
return currentLevel > level && sceneCount == 1;
|
return currentLevel > viewedLevel && sceneCount == 1;
|
||||||
})
|
})
|
||||||
.DistinctUntilChanged()
|
.DistinctUntilChanged()
|
||||||
.Publish(false)
|
.Publish(false)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue