販売シーン歩行者増加リワードの追加

This commit is contained in:
kimura 2021-10-21 17:21:27 +09:00
parent 83eb91027b
commit 0ff46301df
8 changed files with 160 additions and 63 deletions

View File

@ -1347,6 +1347,7 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 8103176713869808018} - component: {fileID: 8103176713869808018}
- component: {fileID: 4251265789366133276}
m_Layer: 5 m_Layer: 5
m_Name: Button_publicity m_Name: Button_publicity
m_TagString: Untagged m_TagString: Untagged
@ -1375,6 +1376,21 @@ RectTransform:
m_AnchoredPosition: {x: 43, y: 473} m_AnchoredPosition: {x: 43, y: 473}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &4251265789366133276
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2835369144934501534}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 58ef3d6173414297b79183d0e69563ae, type: 3}
m_Name:
m_EditorClassIdentifier:
rewardButton: {fileID: 8545829044125670743}
DisableObject: {fileID: 8559323780514547720}
remainTimeText: {fileID: 4542360576964296986}
--- !u!1 &3213111080442531914 --- !u!1 &3213111080442531914
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2466,7 +2482,6 @@ GameObject:
- component: {fileID: 8136363072906095234} - component: {fileID: 8136363072906095234}
- component: {fileID: 8379488605594547508} - component: {fileID: 8379488605594547508}
- component: {fileID: 2771442342717633046} - component: {fileID: 2771442342717633046}
- component: {fileID: 4195116565246018284}
m_Layer: 5 m_Layer: 5
m_Name: Button_publicity_off m_Name: Button_publicity_off
m_TagString: Untagged m_TagString: Untagged
@ -2532,49 +2547,6 @@ MonoBehaviour:
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!114 &4195116565246018284
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8559323780514547720}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2771442342717633046}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1001 &2246654624185019878 --- !u!1001 &2246654624185019878
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -24,6 +24,7 @@ public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
private Animator animator; private Animator animator;
private bool isManyCustomer; private bool isManyCustomer;
private bool isLocked; private bool isLocked;
private bool isPromotion;
private int nextId; private int nextId;
private readonly (int trigger, Vector2 wayPoint, float wait)[] pinkMoves = private readonly (int trigger, Vector2 wayPoint, float wait)[] pinkMoves =
{ {
@ -49,7 +50,7 @@ public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
pinkTransform.localPosition = RightPos; pinkTransform.localPosition = RightPos;
this.UpdateAsObservable().Subscribe(_ => this.UpdateAsObservable().Subscribe(_ =>
{ {
if (isManyCustomer || isLocked) if (isManyCustomer || isLocked || isPromotion)
{ {
return; return;
} }
@ -68,10 +69,8 @@ public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
moveIndex++; moveIndex++;
if (moveIndex == pinkMoves.Length) if (moveIndex == pinkMoves.Length)
{ {
moveIndex = 0; ResetMove();
isLocked = true; isLocked = true;
isManyCustomer = true;
if (animator != null) animator.SetTrigger(nextId);
this.CallWaitForSeconds(coolTime, () => this.CallWaitForSeconds(coolTime, () =>
{ {
isLocked = false; isLocked = false;
@ -83,6 +82,13 @@ public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
}).AddTo(this); }).AddTo(this);
} }
private void ResetMove()
{
moveIndex = 0;
isManyCustomer = true;
if (animator != null) animator.SetTrigger(nextId);
}
public void SetBrotherView(Transform target) public void SetBrotherView(Transform target)
{ {
target.DestroyAllChildrens(); target.DestroyAllChildrens();
@ -140,11 +146,31 @@ public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
SetTrigger(Sleepy); SetTrigger(Sleepy);
} }
public void SetPromotion() public void StartPromotion()
{ {
isManyCustomer = true; isPromotion = true;
pinkTransform.localPosition = LeftPos;
animator.SetTrigger(Promotion); animator.SetTrigger(Promotion);
Vector3 localPosition = RightPos;
localPosition += Vector3.forward * (localPosition.y + Mathf.Abs(walkSideBottomPos));
pinkTransform.localPosition = localPosition;
pinkTransform.localRotation = Quaternion.Euler(Vector3.zero);
}
public void StopPromotion()
{
if (animator == null)
{
isPromotion = false;
ResetMove();
return;
}
var length = animator.GetCurrentAnimatorStateInfo(0).length;
var time = animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
this.CallWaitForSeconds((1 - time % 1) * length - .3f, () =>
{
isPromotion = false;
ResetMove();
});
} }
public void SetWalk() public void SetWalk()

View File

@ -8,7 +8,7 @@ public class CustomerFlow : MonoBehaviour
private IObservable<bool> customerObservable; private IObservable<bool> customerObservable;
private IObservable<bool> walkerObservable; private IObservable<bool> walkerObservable;
private IObservable<bool> adWalkerObservable; private IObservable<bool> adWalkerObservable;
private readonly Subject<Unit> adStartObservable = new Subject<Unit>(); private readonly Subject<IObservable<Unit>> adStartObservable = new Subject<IObservable<Unit>>();
private static readonly float checkHeartInterval = 1f; private static readonly float checkHeartInterval = 1f;
// 歩行者の出現間隔 // 歩行者の出現間隔
private static readonly float walkerInterval = 60f / 6; private static readonly float walkerInterval = 60f / 6;
@ -45,22 +45,31 @@ public class CustomerFlow : MonoBehaviour
// 宣伝時、タップすると60秒だけ稼働するストリーム // 宣伝時、タップすると60秒だけ稼働するストリーム
adWalkerObservable = adStartObservable adWalkerObservable = adStartObservable
.Delay(TimeSpan.FromSeconds(2f)) .Switch()
.Select(x => Observable.Interval(TimeSpan.FromSeconds(3f)) // .Do(_ => Debug.Log($"adWalker:{GetHashCode()}"))
.Take(TimeSpan.FromSeconds(60f)) .Select(_ => false);
.Do(_ => Debug.Log($"adWalker:{GetHashCode()}"))
.Select(_ => false))
.Switch();
#if DEVELOPMENT_BUILD || UNITY_EDITOR #if DEVELOPMENT_BUILD || UNITY_EDITOR
if (UsayaStorageManager.LoadOrDefault(UsayaStorageFilename.Settings_Data, "DebugManyWalker", false)) if (UsayaStorageManager.LoadOrDefault(UsayaStorageFilename.Settings_Data, "DebugManyWalker", false))
{ {
Observable.Timer(TimeSpan.FromSeconds(1f), TimeSpan.FromSeconds(70f)).Subscribe(_ => { adStartObservable.OnNext(default); }).AddTo(this); // Observable.Timer(TimeSpan.FromSeconds(1f), TimeSpan.FromSeconds(70f)).Subscribe(_ => { adStartObservable.OnNext(default); }).AddTo(this);
} }
#endif #endif
} }
public void StartAdWalker() public void StartAdWalker(Action onComplete = null)
{ {
adStartObservable.OnNext(Unit.Default); var timerObservable = AdWalkerTimer().Publish().RefCount();
adStartObservable.OnNext(timerObservable);
timerObservable.Subscribe(_ => { }, () =>
{
onComplete?.Invoke();
}).AddTo(this);
}
private IObservable<Unit> AdWalkerTimer()
{
return Observable.Interval(TimeSpan.FromSeconds(3f))
.Take(TimeSpan.FromSeconds(60f))
.AsUnitObservable();
} }
} }

View File

@ -0,0 +1,28 @@
using System;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
namespace MyGame.Scenes.marketing.Scripts
{
public class IncreaseCustomerButtonView : MonoBehaviour
{
private static readonly string remainTimeFormat = "{0:D2}:{1:D2}";
[SerializeField] private Button rewardButton;
[SerializeField] private GameObject DisableObject;
[SerializeField] private Text remainTimeText;
public IObservable<Unit> RewardButton => rewardButton.OnClickAsObservable().TakeUntilDestroy(this);
public void SetButtonActive(bool active)
{
rewardButton.gameObject.SetActive(active);
DisableObject.SetActive(!active);
}
public void SetTime(int seconds)
{
seconds = Mathf.Max(0, seconds);
remainTimeText.text = string.Format(remainTimeFormat, seconds / 60, seconds % 60);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 58ef3d6173414297b79183d0e69563ae
timeCreated: 1634792615

View File

@ -513,7 +513,8 @@ public class Market : SingletonMonoBehaviour<Market>
public void AdClickAction() public void AdClickAction()
{ {
customerFlow.StartAdWalker(); BrotherPinkView.Instance.StartPromotion();
customerFlow.StartAdWalker(() => BrotherPinkView.Instance.StopPromotion());
} }
private void CheckAndFixStock() private void CheckAndFixStock()

View File

@ -1,25 +1,34 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MyGame.Scenes.marketing.Scripts;
using MyGame.Scripts;
using TMPro; using TMPro;
using UniRx; using UniRx;
using UniRx.Triggers; using UniRx.Triggers;
using UnityEngine; using UnityEngine;
using UnityEngine.UI;
public class MarketManager : MonoBehaviour public class MarketManager : MonoBehaviour
{ {
private static readonly double refreshWaitTime = 300;
[SerializeField] private GameObject closeSign; [SerializeField] private GameObject closeSign;
[SerializeField] private ShopStockView stockView; [SerializeField] private ShopStockView stockView;
[SerializeField] private MarketCartView cartView; [SerializeField] private MarketCartView cartView;
[SerializeField] private BrotherBlueView blueView; [SerializeField] private BrotherBlueView blueView;
[SerializeField] private IncreaseCustomerButtonView rewardButtonView;
[SerializeField] private Transform pinkTarget; [SerializeField] private Transform pinkTarget;
[SerializeField] private Transform coinPrefab; [SerializeField] private Transform coinPrefab;
[SerializeField] private Transform rootTransform; [SerializeField] private Transform rootTransform;
private Market market; private Market market;
List<ProductData> productDataList; List<ProductData> productDataList;
private readonly Subject<int> resetRefreshTimer = new Subject<int>();
private void Start() private void Start()
{ {
resetRefreshTimer.AddTo(this);
SoundManager.Instance.PlayBGM("bgm_marketing"); SoundManager.Instance.PlayBGM("bgm_marketing");
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
CoinManager.Instance.ChangeCoin(gameData.Coin); CoinManager.Instance.ChangeCoin(gameData.Coin);
@ -39,6 +48,41 @@ public class MarketManager : MonoBehaviour
cartView.Initialize(); cartView.Initialize();
cartView.SetStock(startStocks, false); cartView.SetStock(startStocks, false);
BrotherPinkView.Instance.SetBrotherView(pinkTarget); BrotherPinkView.Instance.SetBrotherView(pinkTarget);
rewardButtonView.RewardButton.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
GetRewardDialog.ShowIncreaseCustomerDialog(() =>
{
market.AdClickAction();
gameData.increaseCustomerTime = DateTime.UtcNow.AddSeconds(refreshWaitTime).ToBinary();
#if UNITY_EDITOR
gameData.increaseCustomerTime = DateTime.UtcNow.AddSeconds(10).ToBinary();
#endif
GameDataManager.SaveGameData();
resetRefreshTimer.OnNext((int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds);
});
}).AddTo(this);
resetRefreshTimer
.Subscribe(time =>
{
rewardButtonView.SetButtonActive(time <= 0);
rewardButtonView.SetTime(time);
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);
}).AddTo(this);
var remaining = (int) DateTime.FromBinary(gameData.increaseCustomerTime).Subtract(DateTime.UtcNow).TotalSeconds;
resetRefreshTimer.OnNext(remaining);
// Customerの各アニメーション設定 // Customerの各アニメーション設定
foreach (var controller in market.CustomerControllerList) foreach (var controller in market.CustomerControllerList)

View File

@ -1982,7 +1982,8 @@ PrefabInstance:
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 2 value: 2
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents:
- {fileID: 4195116565246018284, guid: caaa748dbeed576499e8cae74d33f689, type: 3}
m_SourcePrefab: {fileID: 100100000, guid: caaa748dbeed576499e8cae74d33f689, type: 3} m_SourcePrefab: {fileID: 100100000, guid: caaa748dbeed576499e8cae74d33f689, type: 3}
--- !u!224 &714437465 stripped --- !u!224 &714437465 stripped
RectTransform: RectTransform:
@ -2105,6 +2106,18 @@ Transform:
m_Father: {fileID: 2085962459} m_Father: {fileID: 2085962459}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &820175261 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4251265789366133276, guid: caaa748dbeed576499e8cae74d33f689,
type: 3}
m_PrefabInstance: {fileID: 714437464}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 58ef3d6173414297b79183d0e69563ae, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &865915984 --- !u!1 &865915984
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2530,6 +2543,7 @@ MonoBehaviour:
stockView: {fileID: 438315601} stockView: {fileID: 438315601}
cartView: {fileID: 2048621276} cartView: {fileID: 2048621276}
blueView: {fileID: 1506158581} blueView: {fileID: 1506158581}
rewardButtonView: {fileID: 820175261}
pinkTarget: {fileID: 1749782974} pinkTarget: {fileID: 1749782974}
coinPrefab: {fileID: 8159396421809467538, guid: 9fc8076f17c26ff4d9be53b90a7dad4c, coinPrefab: {fileID: 8159396421809467538, guid: 9fc8076f17c26ff4d9be53b90a7dad4c,
type: 3} type: 3}