diff --git a/popcorn/Assets/MyGame/Resource/Animation/failure.anim b/popcorn/Assets/MyGame/Resource/Animation/failure.anim index b355d926..1de736d6 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/failure.anim +++ b/popcorn/Assets/MyGame/Resource/Animation/failure.anim @@ -133,7 +133,7 @@ AnimationClip: m_Level: 0 m_CycleOffset: 0 m_HasAdditiveReferencePose: 0 - m_LoopTime: 1 + m_LoopTime: 0 m_LoopBlend: 0 m_LoopBlendOrientation: 0 m_LoopBlendPositionY: 0 diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity index 8890332b..84bd29fc 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity @@ -620,7 +620,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &460945447 RectTransform: m_ObjectHideFlags: 0 @@ -1028,7 +1028,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &642263094 RectTransform: m_ObjectHideFlags: 0 @@ -1513,7 +1513,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &832390347 RectTransform: m_ObjectHideFlags: 0 @@ -2612,7 +2612,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1370567322 RectTransform: m_ObjectHideFlags: 0 @@ -7923,7 +7923,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: startingGuide: {fileID: 8786490829224139677} - gameResultText: {fileID: 1003859323} + perfectResultObject: {fileID: 642263093} + goodResultObject: {fileID: 1370567321} + failureResultObject: {fileID: 460945446} characterSweat: {fileID: 580170368} characterFlower: {fileID: 785034261} thermalControl: {fileID: 1870432535} @@ -7986,7 +7988,7 @@ MonoBehaviour: baseGrowSpeed: 1 hotGrowSpeed: 1.5 baseCornPopTime: 10 - cornBurntDuration: 3 + cornBurntDuration: 1 --- !u!1 &1928679189 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs index 84c81432..de534a15 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs @@ -26,6 +26,7 @@ public class CornManager : MonoBehaviour private Corn[] cornArray; private bool isHot; + private bool isCompleted; private List> cornConditions = new List>(); private readonly ReactiveProperty cornGrowSpeed = new FloatReactiveProperty(0f); private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); @@ -43,6 +44,7 @@ public class CornManager : MonoBehaviour public void RespawnCorn() { + isCompleted = false; compositeDisposable.Clear(); cornConditions.Clear(); for (int i = 0; i < cornArray.Length; i++) @@ -60,7 +62,7 @@ public class CornManager : MonoBehaviour cornArray[i] = corn; corn.SetCornProperty(baseCornPopTime, cornBurntDuration); - cornGrowSpeed.Subscribe(x => + cornGrowSpeed.Where(_ => !isCompleted).Subscribe(x => { // コーンが弾けた後はRedの場合のみ焦げ進行する if (corn.Condition.Value == CornCondition.Simple && !isHot) @@ -90,20 +92,22 @@ public class CornManager : MonoBehaviour Observable.CombineLatest(cornConditions) .FirstOrDefault(x => !x.Contains(CornCondition.Seed)) .Subscribe(x => - { - if (x.Count(c => c == CornCondition.Simple) == x.Count) // すべてのコーンがPopped { - result.SetValueAndForceNotify(CornResult.Perfect); - } - else if (x.Count(c => c == CornCondition.Spilled) == x.Count) // すべてのコーンが飛び出した - { - result.SetValueAndForceNotify(CornResult.Failure); - } - else - { - result.SetValueAndForceNotify(CornResult.Good); - } - }).AddTo(compositeDisposable); + isCompleted = true; + cornGrowSpeed.Value = 0f; + if (x.Count(c => c == CornCondition.Simple) == x.Count) // すべてのコーンがPopped + { + result.SetValueAndForceNotify(CornResult.Perfect); + } + else if (x.Count(c => c == CornCondition.Spilled) == x.Count) // すべてのコーンが飛び出した + { + result.SetValueAndForceNotify(CornResult.Failure); + } + else + { + result.SetValueAndForceNotify(CornResult.Good); + } + }).AddTo(compositeDisposable); } public void ChangeGrowSpeed(ThermalCondition condition) diff --git a/popcorn/Assets/PopcornGameManager.cs b/popcorn/Assets/PopcornGameManager.cs index b43d7fd8..70fe4ba3 100644 --- a/popcorn/Assets/PopcornGameManager.cs +++ b/popcorn/Assets/PopcornGameManager.cs @@ -17,8 +17,9 @@ public enum GameState public class PopcornGameManager : MonoBehaviour { [SerializeField] private GameObject startingGuide; - // [SerializeField] private Text powerResultText; - [SerializeField] private Text gameResultText; + [SerializeField] private GameObject perfectResultObject; + [SerializeField] private GameObject goodResultObject; + [SerializeField] private GameObject failureResultObject; [SerializeField] private GameObject characterSweat; [SerializeField] private GameObject characterFlower; @@ -28,6 +29,7 @@ public class PopcornGameManager : MonoBehaviour public IReadOnlyReactiveProperty State => state; private readonly ReactiveProperty state = new ReactiveProperty(GameState.Guide); + private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); // Start is called before the first frame update @@ -54,37 +56,73 @@ public class PopcornGameManager : MonoBehaviour throw new ArgumentOutOfRangeException(nameof(x), x, null); } }).AddTo(this); - - this.UpdateAsObservable().Where(_ => Input.GetMouseButton(0)).FirstOrDefault().Subscribe(_ => + + cornManager.Result.SkipLatestValueOnSubscribe().Subscribe(x => { - StartGame(); + state.Value = GameState.Result; + thermalControl.StopMeter(); + characterFlower.gameObject.SetActive(false); + characterSweat.gameObject.SetActive(false); + switch (x) + { + case CornResult.Perfect: + perfectResultObject.SetActive(true); + break; + case CornResult.Good: + + goodResultObject.SetActive(true); + break; + case CornResult.Failure: + failureResultObject.SetActive(true); + break; + default: + throw new ArgumentOutOfRangeException(nameof(x), x, null); + } + + // 再度画面タップでリセット + this.UpdateAsObservable() + .Select(_ => Input.GetMouseButton(0)) + .DistinctUntilChanged() + .Skip(1) + .FirstOrDefault(b => b) + .Subscribe(_ => + { + ResetGame(); + }).AddTo(this); }).AddTo(this); ResetGame(); - - // コーンマネージャからResultきたらStateもResult - - } - - private void Update() - { } private void ResetUI() { startingGuide.SetActive(true); - thermoMeter.gameObject.SetActive(false); - gameResultText.text = ""; + perfectResultObject.SetActive(false); + goodResultObject.SetActive(false); + failureResultObject.SetActive(false); + thermalControl.StopMeter(); + thermoMeter.gameObject.SetActive(false); characterFlower.gameObject.SetActive(false); characterSweat.gameObject.SetActive(false); } private void ResetGame() { + compositeDisposable.Clear(); + this.UpdateAsObservable() + .Select(_ => Input.GetMouseButton(0)) + .DistinctUntilChanged() + .Skip(1) + .FirstOrDefault(b => b) + .Subscribe(_ => + { + StartGame(); + }).AddTo(compositeDisposable); ResetUI(); thermalControl.ResetMeter(); cornManager.RespawnCorn(); + state.Value = GameState.Guide; } private void StartGame()