レベルアップ演出の表示とハートゲージの動きが同期するよう修正

This commit is contained in:
kimura 2021-11-30 18:14:05 +09:00
parent 4403ab4598
commit 38f17286b8
7 changed files with 89 additions and 45 deletions

View File

@ -83,13 +83,26 @@ public class CornField : MonoBehaviour
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
GameDataObserver.Instance.ShopLevelUpdate
.Where(x => x && !isFertilizing) // ハートゲージがフルかつダイアログが開いていない場合レベルアップ
.Subscribe(x => GameDataObserver.Instance.SceneCounter
.DistinctUntilChanged()
.CombineLatest(HeartMeter.Instance.FulledHeart, (count, fulled) => count == 1 && fulled)
.Where(x => x)
.DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{ {
LocalCacheManager.Save(ShopLevelUp.DataTag, gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel);
}).AddTo(this); }).AddTo(this);
GameDataObserver.Instance.HeartObserver
.DistinctUntilChanged()
.Pairwise()
.Subscribe(pair =>
{
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
}).AddTo(this);
counterView.Initialize(gameData.CornSeed); counterView.Initialize(gameData.CornSeed);
additionView.Initialize(0); additionView.Initialize(0);
SetData(); SetData();

View File

@ -67,8 +67,7 @@ public class KitchenManager : MonoBehaviour
DestroyImmediate(go); DestroyImmediate(go);
}).AddTo(this); }).AddTo(this);
}); });
})); });
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel);
} }
else if (TutorialManager.Instance.Index == 6) else if (TutorialManager.Instance.Index == 6)
{ {
@ -100,12 +99,28 @@ public class KitchenManager : MonoBehaviour
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
GameDataObserver.Instance.ShopLevelUpdate
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
GameDataObserver.Instance.SceneCounter
.DistinctUntilChanged()
.CombineLatest(HeartMeter.Instance.FulledHeart, (count, fulled) => count == 1 && fulled)
.Where(x => x) .Where(x => x)
.Subscribe(x => .DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{ {
LocalCacheManager.Save(ShopLevelUp.DataTag, gameData.ViewedShopLevel + 1); if (gameData.isFirstPlay)
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel); {
return;
}
ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
}).AddTo(this);
GameDataObserver.Instance.HeartObserver
.DistinctUntilChanged()
.Pairwise()
.Subscribe(pair =>
{
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
}).AddTo(this); }).AddTo(this);
kitchenView.Initialize(); kitchenView.Initialize();

View File

@ -74,12 +74,16 @@ public class MarketManager : MonoBehaviour
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
GameDataObserver.Instance.ShopLevelUpdate
.Where(x => x && !market.IsPromotion.Value) // ハートゲージがフルかつダイアログが開いていない場合レベルアップ
.Subscribe(x => GameDataObserver.Instance.SceneCounter
.DistinctUntilChanged()
.CombineLatest(HeartMeter.Instance.FulledHeart, (count, fulled) => count == 1 && fulled)
.Where(x => x)
.DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{ {
LocalCacheManager.Save(ShopLevelUp.DataTag, gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel);
}).AddTo(this); }).AddTo(this);
productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet); productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);

View File

@ -40,12 +40,24 @@ public class ProductManagement : MonoBehaviour
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
GameDataObserver.Instance.ShopLevelUpdate
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
GameDataObserver.Instance.SceneCounter
.DistinctUntilChanged()
.CombineLatest(HeartMeter.Instance.FulledHeart, (count, fulled) => count == 1 && fulled)
.Where(x => x) .Where(x => x)
.Subscribe(x => .DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{ {
LocalCacheManager.Save(ShopLevelUp.DataTag, gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel); }).AddTo(this);
GameDataObserver.Instance.HeartObserver
.DistinctUntilChanged()
.Pairwise()
.Subscribe(pair =>
{
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
}).AddTo(this); }).AddTo(this);
// 補充方法設定 // 補充方法設定

View File

@ -87,4 +87,11 @@ public class ShopLevelUp : MonoBehaviour
LocalCacheManager.Remove(CallbackTag); LocalCacheManager.Remove(CallbackTag);
} }
} }
public static void ShowDialog(int level, Action onComplete = null)
{
LocalCacheManager.Save(DataTag, level);
LocalCacheManager.Save(CallbackTag, onComplete);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel);
}
} }

View File

@ -19,12 +19,24 @@ public class Shopping : MonoBehaviour
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart); HeartMeter.Instance.Initialize(gameData.ViewedShopLevel, gameData.Heart);
GameDataObserver.Instance.ShopLevelUpdate
// ハートゲージがフルかつダイアログが開いていない場合レベルアップ
GameDataObserver.Instance.SceneCounter
.DistinctUntilChanged()
.CombineLatest(HeartMeter.Instance.FulledHeart, (count, fulled) => count == 1 && fulled)
.Where(x => x) .Where(x => x)
.Subscribe(x => .DelaySubscription(TimeSpan.FromSeconds(.4f))
.Subscribe(_ =>
{ {
LocalCacheManager.Save(ShopLevelUp.DataTag, gameData.ViewedShopLevel + 1); ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.StoreLevel); }).AddTo(this);
GameDataObserver.Instance.HeartObserver
.DistinctUntilChanged()
.Pairwise()
.Subscribe(pair =>
{
HeartMeter.Instance.AddHeart(pair.Current - pair.Previous);
}).AddTo(this); }).AddTo(this);
// 一覧データ // 一覧データ

View File

@ -23,7 +23,8 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty(); private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty();
public IReadOnlyReactiveProperty<bool> UpdateMissionAchieved => updateMissionAchieved; public IReadOnlyReactiveProperty<bool> UpdateMissionAchieved => updateMissionAchieved;
public IObservable<bool> ShopLevelUpdate { get; private set; } public IObservable<int> HeartObserver => heartObserver;
public IObservable<int> SceneCounter => sceneCounter;
private void Start() private void Start()
{ {
@ -49,26 +50,6 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
hasRecipeObserver.OnNext(gameData.MyRecipes.Length); hasRecipeObserver.OnNext(gameData.MyRecipes.Length);
deliveredBulkOrderObserver.OnNext(gameData.BulkOrderDeliveredCount); deliveredBulkOrderObserver.OnNext(gameData.BulkOrderDeliveredCount);
}).AddTo(this); }).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;
}
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
return currentLevel > viewedLevel && sceneCount == 1;
})
.DistinctUntilChanged()
.Publish(false)
.RefCount();
#if UNITY_EDITOR
// ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); });
#endif
// ミッション達成チェッカー // ミッション達成チェッカー
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet); var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);