From 04ff85725ca7877348bf2903c12e12d87a397036 Mon Sep 17 00:00:00 2001 From: kimura Date: Thu, 14 Oct 2021 17:43:00 +0900 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E8=88=97=E3=83=AC=E3=83=99=E3=83=AB?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=AE=E6=9D=A1=E4=BB=B6=E3=83=AD=E3=82=B8?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0/=20=E3=83=8F?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=83=A1=E3=83=BC=E3=82=BF=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E6=8C=99=E5=8B=95=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyGame/Resources/DontDestroyObject.prefab | 13 +++++ .../marketing/Scripts/BrotherConversation.cs | 4 ++ .../Scenes/marketing/Scripts/ShopLevelUp.cs | 18 ++++-- .../Scenes/shopping/Scripts/Shopping.cs | 1 - .../Assets/MyGame/Scripts/GameDataManager.cs | 4 +- .../Assets/MyGame/Scripts/GameDataObserver.cs | 56 +++++++++++++++++++ .../MyGame/Scripts/GameDataObserver.cs.meta | 3 + popcorn/Assets/MyGame/Scripts/HeartMeter.cs | 45 +++++++++------ 8 files changed, 118 insertions(+), 26 deletions(-) create mode 100644 popcorn/Assets/MyGame/Scripts/GameDataObserver.cs create mode 100644 popcorn/Assets/MyGame/Scripts/GameDataObserver.cs.meta diff --git a/popcorn/Assets/MyGame/Resources/DontDestroyObject.prefab b/popcorn/Assets/MyGame/Resources/DontDestroyObject.prefab index 46b4296e..60e04930 100644 --- a/popcorn/Assets/MyGame/Resources/DontDestroyObject.prefab +++ b/popcorn/Assets/MyGame/Resources/DontDestroyObject.prefab @@ -94,6 +94,7 @@ GameObject: - component: {fileID: 7740671670896384492} - component: {fileID: 3756929251745663541} - component: {fileID: 5400893423074421525} + - component: {fileID: 7906393928596777865} m_Layer: 0 m_Name: DontDestroyObject m_TagString: Untagged @@ -175,6 +176,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 77ded0026daa40d4b872efbaf2c1195c, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &7906393928596777865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3459593390050872226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6febd66062c34eb18c02d22a91eebab0, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &8739647597683206087 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/BrotherConversation.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/BrotherConversation.cs index e3062b93..4758b366 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/BrotherConversation.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/BrotherConversation.cs @@ -49,6 +49,10 @@ public class BrotherConversation : MonoBehaviour backgroundAnimator.SetTrigger(CloseTrigger); this.CallWaitForSeconds(.25f, () => { + GameDataManager.GameData.ViewedShopLevel++; + GameDataManager.GameData.OrderConditionCount = 0; + GameDataManager.SaveGameData(); + HeartMeter.Instance.SetShopLevel(GameDataManager.GameData.ViewedShopLevel, true); TransitionManager.Instance.UnloadScene(GameScenes.Conversation); }); }).AddTo(this); diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs index bf3ecb23..76a1797c 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopLevelUp.cs @@ -7,6 +7,7 @@ using UnityEngine.UI; public class ShopLevelUp : MonoBehaviour { + public static readonly string DataTag = "ShopLevelUpData"; private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger"); private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger"); @@ -19,12 +20,9 @@ public class ShopLevelUp : MonoBehaviour private void Start() { - // レベルからスクリプト読み込み - var shopLevel = 5; + var shopLevel = LocalCacheManager.Load(DataTag); var scriptList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ScriptDataSheet); var targetScriptList = scriptList.Where(data => data.id == shopLevel).ToList(); - LocalCacheManager.Save(BrotherConversation.ScriptDataTag, targetScriptList); - closeButton.OnClickAsObservable().Subscribe(_ => { transform.SetLocalScale(0); @@ -32,7 +30,17 @@ public class ShopLevelUp : MonoBehaviour this.CallWaitForSeconds(.25f, () => { TransitionManager.Instance.UnloadScene(GameScenes.StoreLevel); - TransitionManager.Instance.LoadSceneAdditive(GameScenes.Conversation); + if (targetScriptList.Count > 0) + { + LocalCacheManager.Save(BrotherConversation.ScriptDataTag, targetScriptList); + TransitionManager.Instance.LoadSceneAdditive(GameScenes.Conversation); + } + else + { + GameDataManager.GameData.ViewedShopLevel++; + GameDataManager.SaveGameData(); + HeartMeter.Instance.SetShopLevel(GameDataManager.GameData.ViewedShopLevel, true); + } }); }).AddTo(this); diff --git a/popcorn/Assets/MyGame/Scenes/shopping/Scripts/Shopping.cs b/popcorn/Assets/MyGame/Scenes/shopping/Scripts/Shopping.cs index a7cd597e..53026fef 100644 --- a/popcorn/Assets/MyGame/Scenes/shopping/Scripts/Shopping.cs +++ b/popcorn/Assets/MyGame/Scenes/shopping/Scripts/Shopping.cs @@ -23,7 +23,6 @@ public class Shopping : MonoBehaviour var shopDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopDataSheet); foreach (var shopData in shopDataList) { - Debug.Log($"{shopData.name}, {shopData.Category}"); if (shopData.Category == ItemCategory.Special) { continue; diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index 029fa3f8..bcd1f85a 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -91,8 +91,8 @@ public sealed class GameData { public int Heart = 0; [DataMember(Name = "Data22")] public int[] Pans; - // [DataMember(Name = "Data23")] - + [DataMember(Name = "Data23")] + public int ViewedShopLevel; [DataMember(Name = "Data24")] public ProductRefillMode RefillMode; [DataMember(Name = "Data25")] diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs new file mode 100644 index 00000000..cce00c8a --- /dev/null +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using UniRx; +using UnityEngine; + +public class GameDataObserver : SingletonMonoBehaviour +{ + [SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f); + private IObservable heartObserver; + public IObservable Heart => heartObserver; + + private IObservable sceneCounter; + public IObservable SceneCounter => sceneCounter; + + public IObservable ShopLevelUpdate; + + private void Start() + { + checkInterval.AddTo(this); + var gameData = GameDataManager.GameData; + var levelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopLevelDataSheet); + heartObserver = checkInterval + .Select(x => + Observable.Interval(TimeSpan.FromSeconds(x)) + .Select(_ => gameData.Heart) + .DistinctUntilChanged()) + .Switch(); + + var shopLevelObserver = checkInterval + .Select(x => + Observable.Interval(TimeSpan.FromSeconds(x)) + .Select(_ => gameData.ViewedShopLevel) + .DistinctUntilChanged()) + .Switch(); + + sceneCounter = checkInterval + .Select(x => + Observable.Interval(TimeSpan.FromSeconds(x)) + .Select(_ => UnityEngine.SceneManagement.SceneManager.sceneCount) + .DistinctUntilChanged() + // .Do(c => { Debug.Log($"sceneCount:{c}");}) + ) + .Switch(); + + ShopLevelUpdate = Observable.CombineLatest(heartObserver, shopLevelObserver, sceneCounter, + (heart, level, sceneCount) => + { + var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1; + return currentLevel > level && sceneCount == 1; + }) + .DistinctUntilChanged() + .Publish(false) + .RefCount(); + ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); }); + } +} diff --git a/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs.meta b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs.meta new file mode 100644 index 00000000..8a5334b4 --- /dev/null +++ b/popcorn/Assets/MyGame/Scripts/GameDataObserver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6febd66062c34eb18c02d22a91eebab0 +timeCreated: 1634180079 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scripts/HeartMeter.cs b/popcorn/Assets/MyGame/Scripts/HeartMeter.cs index 763c2035..56920e7d 100644 --- a/popcorn/Assets/MyGame/Scripts/HeartMeter.cs +++ b/popcorn/Assets/MyGame/Scripts/HeartMeter.cs @@ -12,12 +12,15 @@ public class HeartMeter : SingletonMonoBehaviour [SerializeField] private TextMeshProUGUI heartLevel; private Coroutine coroutine; - private List levelList = new List(); + private List shopLevelList = new List(); private int currentHeartCount; private readonly ReactiveProperty viewHeartCount = new ReactiveProperty(); public IReadOnlyReactiveProperty ShopLevel => shopLevel; private readonly ReactiveProperty shopLevel = new ReactiveProperty(); private CompositeDisposable compositeDisposable = new CompositeDisposable(); + + private float minHeart; + private float maxHeart; private void Awake() { @@ -31,30 +34,24 @@ public class HeartMeter : SingletonMonoBehaviour compositeDisposable.AddTo(this); } - public void Initialize() + public void Initialize(int newShopLevel = 0, int newHeartCount = 0) { - levelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopLevelDataSheet).Select(shopLevelData => shopLevelData.heart).ToList(); compositeDisposable.Clear(); - shopLevel.Subscribe(x => - { - heartLevel.text = $"{x}"; - }).AddTo(compositeDisposable); + shopLevelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopLevelDataSheet); + viewHeartCount.SkipLatestValueOnSubscribe().Subscribe(heartCount => { - if (levelList.Empty()) - { - return; - } - shopLevel.Value = GetShopLevel(Mathf.FloorToInt(heartCount)) + 1; - if (levelList.Count == shopLevel.Value) + if (shopLevelList.Count == shopLevel.Value) { slider.value = 1; } else { - slider.value = (heartCount - levelList[shopLevel.Value - 1]) / (levelList[shopLevel.Value] - levelList[shopLevel.Value - 1]); + slider.value = Mathf.InverseLerp(minHeart, maxHeart, heartCount); } }).AddTo(compositeDisposable); + SetHeart(newHeartCount); + SetShopLevel(newShopLevel); } public void SetHeart(int heartCount) @@ -63,11 +60,23 @@ public class HeartMeter : SingletonMonoBehaviour viewHeartCount.SetValueAndForceNotify(heartCount); } - private int GetShopLevel(int heartCount) + public void SetShopLevel(int newShopLevel, bool animate = false) { - return levelList.FindLastIndex(x => x <= heartCount); + shopLevel.Value = newShopLevel; + heartLevel.text = $"{newShopLevel}"; + minHeart = shopLevelList.FirstOrDefault(data => data.shopLevel == newShopLevel)?.heart ?? 0; + maxHeart = shopLevelList.FirstOrDefault(data => data.shopLevel == newShopLevel + 1)?.heart ?? 0; + if (animate) + { + var tmpCount = currentHeartCount - (int)minHeart; + SetHeart((int)minHeart); + AddHeart(tmpCount); + } + else + { + viewHeartCount.SetValueAndForceNotify(currentHeartCount); + } } - public void AddHeart(int value) { this.SafeStopCoroutine(coroutine); @@ -78,7 +87,7 @@ public class HeartMeter : SingletonMonoBehaviour }); this.CallLerp(1f, f => { - viewHeartCount.Value = Mathf.Min(currentHeartCount, viewHeartCount.Value + value * Time.deltaTime); + viewHeartCount.Value = Mathf.Min(currentHeartCount, viewHeartCount.Value + value * f); }); } } \ No newline at end of file