From e6ffd80e7adf7669cb7f58a78bd228d896b6d30c Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 4 Feb 2022 17:12:08 +0900 Subject: [PATCH] =?UTF-8?q?vip=E5=AE=A3=E4=BC=9D=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E8=A1=A8=E7=A4=BA=E5=87=A6=E7=90=86=E3=82=92Manager?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/IncreaseCustomerButtonView.cs | 23 +- .../Scenes/marketing/Scripts/MarketManager.cs | 59 ++--- .../MyGame/Scenes/marketing/marketing.unity | 217 +++++++++++++++++- 3 files changed, 259 insertions(+), 40 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/IncreaseCustomerButtonView.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/IncreaseCustomerButtonView.cs index 9dc15754..16c4ecc7 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/IncreaseCustomerButtonView.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/IncreaseCustomerButtonView.cs @@ -12,17 +12,36 @@ namespace MyGame.Scenes.marketing.Scripts [SerializeField] private GameObject DisableObject; [SerializeField] private Text remainTimeText; public IObservable RewardButton => rewardButton.OnClickAsObservable().TakeUntilDestroy(this); + private IDisposable timerDisposable; - public void SetButtonActive(bool active) + private void SetButtonActive(bool active) { rewardButton.gameObject.SetActive(active); DisableObject.SetActive(!active); } - public void SetTime(int seconds) + private void SetTime(int seconds) { seconds = Mathf.Max(0, seconds); remainTimeText.text = string.Format(remainTimeFormat, seconds / 60, seconds % 60); } + + public void ResetTimer(int time) + { + // タイマーの更新処理 + timerDisposable?.Dispose(); + SetButtonActive(time <= 0); + SetTime(time); + timerDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f)) + .Select(x => (int)(time - x)) + .TakeWhile(x => x > 0) + .Subscribe(x => + { + SetTime(x); + }, () => + { + SetButtonActive(true); + }).AddTo(this); + } } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs index 3587ca73..d6e9abb0 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs @@ -26,13 +26,15 @@ public class MarketManager : MonoBehaviour private Market market; List productDataList; - private readonly Subject resetRefreshTimer = new Subject(); + private readonly Subject customerRewardTimerUpdateSubject = new Subject(); + private readonly Subject vipTimerUpdateSubject = new Subject(); private readonly CompositeDisposable ShopClosedCompositeDisposable = new CompositeDisposable(); private void Start() { ShopClosedCompositeDisposable.AddTo(this); - resetRefreshTimer.AddTo(this); + customerRewardTimerUpdateSubject.AddTo(this); + vipTimerUpdateSubject.AddTo(this); market = Market.Instance; SoundManager.Instance.PlayBGM("bgm_marketing"); @@ -69,7 +71,7 @@ public class MarketManager : MonoBehaviour gameData.FinishTutorial(); GameDataManager.SaveGameData(); walkerMask.gameObject.SetActive(false); - resetRefreshTimer.OnNext(Unit.Default); + customerRewardTimerUpdateSubject.OnNext(Unit.Default); rewardButtonView.gameObject.SetActive(true); }).AddTo(controller).AddTo(this); }); @@ -121,49 +123,54 @@ public class MarketManager : MonoBehaviour gameData.increaseCustomerTime = DateTime.UtcNow.AddSeconds(10).ToBinary(); #endif GameDataManager.SaveGameData(); - resetRefreshTimer.OnNext(Unit.Default); + customerRewardTimerUpdateSubject.OnNext(Unit.Default); }); }).AddTo(this); - - vipCustomerButtonView.ShowButton(); + + // VIP宣伝ボタン vipCustomerButtonView.VipButton.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ => { GetRewardDialog.ShowVipCustomerDialog(() => { - + market.VipAction(); + }, () => + { + // 現在時刻に設定して期限切れにする + gameData.vipCustomerLimitTime = DateTime.UtcNow.ToBinary(); + vipTimerUpdateSubject.OnNext(Unit.Default); }); }).AddTo(this); - + // onNextをトリガーに実行 - IDisposable timerDisposable = null; - resetRefreshTimer + customerRewardTimerUpdateSubject .Select(_ => (int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds) .Subscribe(time => { - // タイマーの更新処理 - timerDisposable?.Dispose(); - rewardButtonView.SetButtonActive(time <= 0); - rewardButtonView.SetTime(time); - timerDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f)) - .Select(x => (int)(time - x)) - .TakeWhile(x => x > 0) - .Subscribe(x => - { - rewardButtonView.SetTime(x); - }, () => - { - rewardButtonView.SetButtonActive(true); - }).AddTo(this); + rewardButtonView.ResetTimer(time); }).AddTo(this); - resetRefreshTimer.OnNext(Unit.Default); + if (DateTime.FromBinary(gameData.vipCustomerLimitTime) >= DateTime.UtcNow) + { + vipCustomerButtonView.ShowButton(gameData.vipCustomerFirstOpen); + gameData.vipCustomerFirstOpen = false; + vipTimerUpdateSubject + .Select(_ => (int) DateTime.FromBinary(gameData.vipCustomerLimitTime).Subtract(DateTime.UtcNow).TotalSeconds) + .Subscribe(time => + { + vipCustomerButtonView.ResetTimer(time); + }).AddTo(this); + } + + customerRewardTimerUpdateSubject.OnNext(Unit.Default); + vipTimerUpdateSubject.OnNext(Unit.Default); // アプリ復帰時に残り時間更新 Observable.EveryApplicationPause() .Where(pause => !pause) .Subscribe(_ => { - resetRefreshTimer.OnNext(Unit.Default); + customerRewardTimerUpdateSubject.OnNext(Unit.Default); + vipTimerUpdateSubject.OnNext(Unit.Default); }).AddTo(this); market.IsPromotion.Subscribe(active => diff --git a/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity b/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity index 8bc3f449..10936004 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity +++ b/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity @@ -702,6 +702,36 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &172087639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 172087640} + m_Layer: 0 + m_Name: StayPos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &172087640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 172087639} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.71, y: -2.1827226, z: 0} + m_LocalScale: {x: 0.9, y: 0.9, z: 0.9} + m_Children: [] + m_Father: {fileID: 2017358937} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &183110189 GameObject: m_ObjectHideFlags: 0 @@ -2908,6 +2938,8 @@ MonoBehaviour: walkerInterval: 10 adWalkerDuration: 60 adWalkerCount: 20 + vipCustomerCount: 6 + vipCustomerInterval: 5 tastingCustomerInterval: 5 --- !u!114 &658817262 MonoBehaviour: @@ -2994,7 +3026,7 @@ Transform: m_Children: - {fileID: 1717315656} m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &668553842 GameObject: @@ -3717,8 +3749,33 @@ PrefabInstance: type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: e644184ee7cac4454a2ebc1fc479ecb4, + objectReference: {fileID: 21300000, guid: 88b678672e5bca548bedbae7386e4346, type: 3} + - target: {fileID: 512143980313251866, guid: caaa748dbeed576499e8cae74d33f689, + type: 3} + propertyPath: vipMoveSpeed + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 512143980313251866, guid: caaa748dbeed576499e8cae74d33f689, + type: 3} + propertyPath: customerDirection + value: + objectReference: {fileID: 985747657} + - target: {fileID: 512143980313251866, guid: caaa748dbeed576499e8cae74d33f689, + type: 3} + propertyPath: vipCustomerAnimator + value: + objectReference: {fileID: 985747656} + - target: {fileID: 512143980313251866, guid: caaa748dbeed576499e8cae74d33f689, + type: 3} + propertyPath: vipStayPosTransform + value: + objectReference: {fileID: 172087640} + - target: {fileID: 512143980313251866, guid: caaa748dbeed576499e8cae74d33f689, + type: 3} + propertyPath: vipSpeechBubbleObject + value: + objectReference: {fileID: 985747654} - target: {fileID: 1174152333972670060, guid: caaa748dbeed576499e8cae74d33f689, type: 3} propertyPath: m_fontColor.a @@ -3817,12 +3874,12 @@ PrefabInstance: - target: {fileID: 1408184404978035950, guid: caaa748dbeed576499e8cae74d33f689, type: 3} propertyPath: m_RootOrder - value: 8 + value: 7 objectReference: {fileID: 0} - target: {fileID: 1909038109161790577, guid: caaa748dbeed576499e8cae74d33f689, type: 3} propertyPath: m_RootOrder - value: 7 + value: 8 objectReference: {fileID: 0} - target: {fileID: 1913713732571476837, guid: caaa748dbeed576499e8cae74d33f689, type: 3} @@ -3853,13 +3910,13 @@ PrefabInstance: type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: 3e8106fd24f7946e2a20ebd081ebb0b9, + objectReference: {fileID: 21300000, guid: 401e6b14583a46443be3b7124b78ac09, type: 3} - target: {fileID: 3664916832434116137, guid: caaa748dbeed576499e8cae74d33f689, type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: dab0cd6adf1694bd6b96c224ad8c38e6, + objectReference: {fileID: 21300000, guid: e8fb21ace44c3e748959b969f895dd23, type: 3} - target: {fileID: 3664916832512110618, guid: caaa748dbeed576499e8cae74d33f689, type: 3} @@ -4010,7 +4067,7 @@ PrefabInstance: type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: 0469694e83769479fa737c3a3b9f6b06, + objectReference: {fileID: 21300000, guid: 0a13c07b1bd21434d801188fb9b7546d, type: 3} - target: {fileID: 3664916832825273575, guid: caaa748dbeed576499e8cae74d33f689, type: 3} @@ -4051,7 +4108,7 @@ PrefabInstance: type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: afb06cd566c9b4c0eba30dd082477478, + objectReference: {fileID: 21300000, guid: 7597f863b51829447a8afd00534fe6e4, type: 3} - target: {fileID: 3664916834267713207, guid: caaa748dbeed576499e8cae74d33f689, type: 3} @@ -4117,7 +4174,7 @@ PrefabInstance: type: 3} propertyPath: m_Sprite value: - objectReference: {fileID: 21300000, guid: b128a700ffcf24ec29e2a2ce7af50858, + objectReference: {fileID: 21300000, guid: 3be9a3bcc8d7c864a97b5be41e33418f, type: 3} - target: {fileID: 8591874021033984247, guid: caaa748dbeed576499e8cae74d33f689, type: 3} @@ -4878,7 +4935,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &876376901 GameObject: @@ -5403,6 +5460,110 @@ SortingGroup: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 3 +--- !u!1001 &985747653 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2017358937} + m_Modifications: + - target: {fileID: 5353524989891006842, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalPosition.x + value: -10.0789995 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalPosition.y + value: -2.1827226 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalPosition.z + value: -35.82837 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8476357288433061819, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + propertyPath: m_Name + value: customer_Luxury_Gray + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cd3da4efffd34614794276964fca59c7, type: 3} +--- !u!1 &985747654 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6877570175858391367, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + m_PrefabInstance: {fileID: 985747653} + m_PrefabAsset: {fileID: 0} +--- !u!4 &985747655 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8476357288433061812, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + m_PrefabInstance: {fileID: 985747653} + m_PrefabAsset: {fileID: 0} +--- !u!95 &985747656 stripped +Animator: + m_CorrespondingSourceObject: {fileID: 8476357288433061813, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + m_PrefabInstance: {fileID: 985747653} + m_PrefabAsset: {fileID: 0} +--- !u!114 &985747657 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 9067878707261228985, guid: cd3da4efffd34614794276964fca59c7, + type: 3} + m_PrefabInstance: {fileID: 985747653} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0eb44b30c9454383898faae0c3666b94, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &990563154 GameObject: m_ObjectHideFlags: 0 @@ -5727,7 +5888,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1025201118 MonoBehaviour: @@ -19798,6 +19959,38 @@ Transform: type: 3} m_PrefabInstance: {fileID: 2011193247} m_PrefabAsset: {fileID: 0} +--- !u!1 &2017358936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2017358937} + m_Layer: 0 + m_Name: VipReward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2017358937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017358936} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 172087640} + - {fileID: 985747655} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2031857953 GameObject: m_ObjectHideFlags: 0 @@ -25109,7 +25302,7 @@ PrefabInstance: - target: {fileID: 3667080857874733261, guid: b875e6e94a97840ca8490ce0718fca6e, type: 3} propertyPath: m_RootOrder - value: 8 + value: 9 objectReference: {fileID: 0} - target: {fileID: 3667080857874733261, guid: b875e6e94a97840ca8490ce0718fca6e, type: 3}