diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs index 1f566f2f..9c772cdb 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CookingResult.cs @@ -45,7 +45,7 @@ public class CookingResult : MonoBehaviour result.Value = resultData; SetData(productData, rarityData, viewType); - if (GameDataManager.GameData.isFirstPlay) + if (!GameDataManager.GameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { // ボタン非表示 SetUI(resultData, viewType, CheckMakeOne(resultData, productData), true); @@ -53,12 +53,15 @@ public class CookingResult : MonoBehaviour // 失敗したら再チャレンジ if (resultData == CornResult.Failure) { - TutorialManager.Instance.ShowTutorialConversation(9, () => + Observable.Timer(TimeSpan.FromSeconds(1.25f)).Subscribe(_ => { - SoundManager.Instance.ChangeVolumeUniqueBGM(1f); - TransitionManager.Instance.UnloadScene(GameScenes.CookingResults); - LocalCacheManager.Load(PopcornGameManager.RestartCallbackTag, null)?.Invoke(); - }); + TutorialManager.Instance.ShowTutorialConversation(2, () => + { + SoundManager.Instance.ChangeVolumeUniqueBGM(1f); + TransitionManager.Instance.UnloadScene(GameScenes.CookingResults); + LocalCacheManager.Load(PopcornGameManager.RestartCallbackTag, null)?.Invoke(); + }); + }).AddTo(this); return; } successAction?.Invoke(); diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/PopcornGameManager.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/PopcornGameManager.cs index d4ff46e5..0392f1b9 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/PopcornGameManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/PopcornGameManager.cs @@ -58,7 +58,7 @@ public class PopcornGameManager : MonoBehaviour { case GameState.TutorialBeforeGuide: case GameState.Guide: - thermalControl.ResetMeter(GameDataManager.GameData.isFirstPlay); + thermalControl.ResetMeter(!GameDataManager.GameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)); thermoMeter.gameObject.SetActive(false); cornManager.RespawnCorn(); break; @@ -76,21 +76,15 @@ public class PopcornGameManager : MonoBehaviour ResetGame(); - if (GameDataManager.GameData.isFirstPlay) + if (!GameDataManager.GameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { - if (TutorialManager.Instance.Index == 7) + cornManager.SetCornsActive(false); + state.SetValueAndForceNotify(GameState.TutorialBeforeGuide); + GameGuideDialog.ShowDialog(() => { - cornManager.SetCornsActive(false); - state.SetValueAndForceNotify(GameState.TutorialBeforeGuide); - TutorialManager.Instance.ShowTutorialConversation(8, () => - { - GameGuideDialog.ShowDialog(() => - { - state.SetValueAndForceNotify(GameState.Guide); - cornManager.SetCornsActive(true); - }); - }); - } + state.SetValueAndForceNotify(GameState.Guide); + cornManager.SetCornsActive(true); + }); } #if DEVELOPMENT_BUILD || UNITY_EDITOR diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs index 269ad118..58be19e5 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/KitchenManager.cs @@ -30,29 +30,25 @@ public class KitchenManager : MonoBehaviour // レシピの表示 cookingButton.OnClickAsObservable().Subscribe(_ => { - RecipeSelectDialog.ShowDialog(ProductViewType.Default, () => - { - if (gameData.isFirstPlay && TutorialManager.Instance.Index == 2) - { - var go = FindObjectOfType().transform; - go.transform.FindChildByName("Button_field", t => - { - TutorialManager.Instance.ShowTutorialMask(go.parent, t as RectTransform, true); - }); - } - }); + RecipeSelectDialog.ShowDialog(ProductViewType.Default); }); // tutorial -#if UNITY_EDITOR - Debug.Log($"isFirstPlay:{gameData.isFirstPlay}"); -#endif - if (gameData.isFirstPlay) + if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { - if (TutorialManager.Instance.Index == 1) + if (TutorialManager.Instance.Index == 0) { - gameData.CornSeed = 90; - gameData.Coin = 10; + gameData.ViewedShopLevel = 0; + // アイテム付与 + gameData.CornSeed = 100; + gameData.Coin = 0; + if (!(gameData.Material.FirstOrDefault(x => x.Id == 2) is MaterialData materialData)) + { + materialData = new MaterialData {Id = 2}; + gameData.Material.Add(materialData); + } + materialData.Amount++; + // 店舗レベル1達成表示 ShopLevelUp.ShowDialog(1, () => { @@ -68,24 +64,10 @@ public class KitchenManager : MonoBehaviour }); }); } - else if (TutorialManager.Instance.Index == 6) + else { - gameData.CornSeed = 150; - gameData.Material.First(m => m.Id == 2).Amount = 1; - TutorialManager.Instance.ShowTutorialConversation(7, () => - { - // マスク表示 - var buttonRectTransform = cookingButton.transform as RectTransform; - var go = TutorialManager.Instance.ShowTutorialMask(buttonRectTransform.parent, buttonRectTransform); - cookingButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - DestroyImmediate(go); - }).AddTo(this); - }); - } - else if (TutorialManager.Instance.Index > 7) - { - TutorialManager.Instance.ShowTutorialConversation(10, () => + // チュートリアル調理終了後 + TutorialManager.Instance.ShowTutorialConversation(3, () => { var go = FindObjectOfType().transform; go.transform.FindChildByName("Button_shop", t => @@ -101,13 +83,10 @@ public class KitchenManager : MonoBehaviour // ハートゲージがフルかつダイアログが開いていない場合レベルアップ HeartMeter.Instance.FulledHeart + .SkipWhile(_ => !gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) .DelaySubscription(TimeSpan.FromSeconds(.4f)) .Subscribe(_ => { - if (gameData.isFirstPlay) - { - return; - } ShopLevelUp.ShowDialog(gameData.ViewedShopLevel + 1); }).AddTo(this); @@ -155,7 +134,7 @@ public class KitchenManager : MonoBehaviour kitchenView.SetTiredAnimation(); showAdDialogSubject.OnNext(Unit.Default); } - else if (remaining > 0 || gameData.isFirstPlay) + else if (remaining > 0 || !gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { adButton.gameObject.SetActive(false); kitchenView.SetNormalAnimation(); diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs index dd176f9c..6077708e 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/Market.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using MyGame.Scenes.marketing.Scripts; +using MyGame.Scripts; using TMPro; using UniRx; using UniRx.Triggers; @@ -288,7 +289,8 @@ public class Market : SingletonMonoBehaviour return; } - if (gameData.isFirstPlay) + // チュートリアル中は抑制 + if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { return; } diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs index 50fe0421..7473e78f 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs @@ -36,9 +36,9 @@ public class MarketManager : MonoBehaviour SoundManager.Instance.PlayBGM("bgm_marketing"); var gameData = GameDataManager.GameData; - if (gameData.isFirstPlay) + if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { - if (TutorialManager.Instance.Index == 10) + if (TutorialManager.Instance.Index == 3) { // SetShopViewを使わず表示構築 rewardButtonView.gameObject.SetActive(false); @@ -66,10 +66,7 @@ public class MarketManager : MonoBehaviour GameDataManager.SaveGameData(); walkerMask.gameObject.SetActive(false); resetRefreshTimer.OnNext((int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds); - TutorialManager.Instance.ShowTutorialConversation(12, () => - { - SetShopView(market.CurrentShopState.Value); - }); + SetShopView(market.CurrentShopState.Value); }).AddTo(controller).AddTo(this); }); } @@ -225,9 +222,10 @@ public class MarketManager : MonoBehaviour // 開閉店 market.CurrentShopState - .Where(_ => !gameData.isFirstPlay) + .SkipWhile(_ => !gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) .Subscribe(state => { + Debug.Log($"SetShopView"); SetShopView(state); }).AddTo(this); } diff --git a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs index 56226e66..73af2c08 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs +++ b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeDetailView.cs @@ -43,26 +43,14 @@ public class RecipeDetailView : MonoBehaviour var data = LocalCacheManager.Load(PopcornGameManager.CookingDataTag); var gameData = GameDataManager.GameData; - if (gameData.isFirstPlay) + if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { - if (TutorialManager.Instance.Index == 1) + // マスク表示 + var go = TutorialManager.Instance.ShowTutorialMask(transform.parent.parent, nextButton.transform as RectTransform); + nextButton.OnClickAsObservable().Take(1).Subscribe(_ => { - TutorialManager.Instance.ShowTutorialConversation(2, () => - { - LocalCacheManager.Load(CallbackTag, null)?.Invoke(); - TransitionManager.Instance.UnloadScene(GameScenes.RecipeChoice); - TransitionManager.Instance.UnloadScene(GameScenes.Recipe); - }); - } - else if (TutorialManager.Instance.Index == 7) - { - // マスク表示 - var go = TutorialManager.Instance.ShowTutorialMask(transform.parent.parent, nextButton.transform as RectTransform); - nextButton.OnClickAsObservable().Take(1).Subscribe(_ => - { - DestroyImmediate(go); - }).AddTo(this); - } + DestroyImmediate(go); + }).AddTo(this); } cancelButton.OnClickAsObservable().Take(1).Subscribe(_ => diff --git a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeSelectDialog.cs b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeSelectDialog.cs index 68b5cc63..602159dd 100644 --- a/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeSelectDialog.cs +++ b/popcorn/Assets/MyGame/Scenes/recipe/Scripts/RecipeSelectDialog.cs @@ -63,13 +63,7 @@ public class RecipeSelectDialog : MonoBehaviour view.RecipeClickObservable.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => { LocalCacheManager.Save(PopcornGameManager.CookingDataTag, productData); - RecipeDetailView.ShowDialog(() => - { - if (gameData.isFirstPlay) - { - LocalCacheManager.Load(CallbackTag, null)?.Invoke(); - } - }); + RecipeDetailView.ShowDialog(); }).AddTo(this); } else @@ -80,7 +74,7 @@ public class RecipeSelectDialog : MonoBehaviour LayoutRebuilder.ForceRebuildLayoutImmediate(content); scrollRect.verticalNormalizedPosition = 1; - if (gameData.isFirstPlay) + if (!gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) { scrollRect.vertical = false; // マスク表示 diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index 0377bed2..f2878b5d 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; +using MyGame.Scripts; public enum AdRewardType { GachaCoin = 1, @@ -129,8 +130,8 @@ public sealed class GameData { public long kitchenRefreshTime= DateTime.UtcNow.ToBinary(); // tutorial - [DataMember(Name = "Data38")] - public bool isFirstPlay = true; + [DataMember(Name = "Data38")] + public TutorialFlag FinishedFlags = TutorialFlag.None; // フライパン [DataMember(Name = "Data39")] @@ -291,7 +292,7 @@ public sealed class GameData { public void FinishTutorial() { - isFirstPlay = false; + FinishedFlags |= TutorialFlag.FirstPlay; fertilizerTime = DateTime.UtcNow.ToBinary(); increaseCustomerTime = DateTime.UtcNow.ToBinary(); kitchenRefreshTime = DateTime.UtcNow.ToBinary(); diff --git a/popcorn/Assets/MyGame/Scripts/TutorialManager.cs b/popcorn/Assets/MyGame/Scripts/TutorialManager.cs index 1a1979d2..24740fe3 100644 --- a/popcorn/Assets/MyGame/Scripts/TutorialManager.cs +++ b/popcorn/Assets/MyGame/Scripts/TutorialManager.cs @@ -5,6 +5,16 @@ using UnityEngine; namespace MyGame.Scripts { + + [Flags] + public enum TutorialFlag + { + None = 0, + FirstPlay = 1, + CornField = 1 << 1, + Shopping = 1 << 2, + Management = 1 << 3, + } public class TutorialManager : SingletonMonoBehaviour { [SerializeField] private TutorialObjectMask maskPrefab; @@ -19,7 +29,7 @@ namespace MyGame.Scripts public void ResetTutorial() { - index = 1; + index = 0; } public void ShowTutorialConversation(int id, Action onComplete = null)