diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity index 147829cd..61f0052b 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity @@ -4380,6 +4380,8 @@ MonoBehaviour: cornPopSpeed: 30 screenKoProbability: 0.2 maxScreenKoCount: 1 + willFinishValue: 0.798 + cornAddCount: 50 cornCountSlider: {fileID: 657773260} faildCountSlider: {fileID: 657773259} coldGrowSpeedSlider: {fileID: 1661453984} diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs index 20b5966b..f7ef2f91 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs @@ -99,6 +99,12 @@ public class Corn : MonoBehaviour case CornCondition.Seed: break; case CornCondition.Simple: + // コーンが弾けたとき、GrowSpeedを再設定する + // ThermalCondition.Hot以外では焦げ進行なし + if (!isHot) + { + ChangeGrowSpeed(0f); + } CornPop(); break; case CornCondition.Burnt: diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs index 05ede726..8f13aa8f 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs @@ -32,6 +32,9 @@ public class CornManager : MonoBehaviour [Space] [SerializeField, Range(0,1)] private float screenKoProbability; [SerializeField] private int maxScreenKoCount; + [Header("演出で増やすコーン")] + [SerializeField, Range(0, 1)] private float willFinishValue = 0.6f; + [SerializeField] private int cornAddCount = 40; public IReadOnlyReactiveProperty Result => result; private readonly ReactiveProperty result = new ReactiveProperty(); @@ -132,18 +135,13 @@ public class CornManager : MonoBehaviour compositeDisposable.Clear(); cornConditions.Clear(); progress.Value = 0f; - for (int i = 0; i < cornArray.Length; i++) - { - if (cornArray[i] != null) - { - Destroy(cornArray[i].gameObject); - } - } + cornSpawnTarget.DestroyAllChildrens(); cornArray = new Corn[cornSpawnCount]; // コーン生成 - var shuffledArray = Enumerable.Range(0, cornSpawnCount).OrderBy(_ => Random.value).ToArray(); - for (int i = 0; i < cornSpawnCount; i++) + var shuffledArray = Enumerable.Range(0, cornArray.Length).OrderBy(_ => Random.value).ToArray(); + + for (int i = 0; i < cornArray.Length; i++) { var corn = Instantiate(cornPrefab, cornSpawnTarget); cornArray[i] = corn; @@ -179,12 +177,6 @@ public class CornManager : MonoBehaviour case CornCondition.Seed: break; case CornCondition.Simple: - // コーンが弾けたとき、GrowSpeedを再設定する - // ThermalCondition.Hot以外では焦げ進行なし - if (!isHot) - { - corn.ChangeGrowSpeed(0f); - } break; case CornCondition.Burnt: // ミス数加算 @@ -201,8 +193,9 @@ public class CornManager : MonoBehaviour cornConditions.Add(corn.Condition); } - var cornConditionsObservable = Observable.CombineLatest(cornConditions).Publish().RefCount(); + var cornConditionsObservable = cornConditions.CombineLatest().Publish().RefCount(); + // コーン全体の進捗 cornConditionsObservable .Select(x => x.Count(cond => cond != CornCondition.Seed)) .Subscribe(x => @@ -230,6 +223,36 @@ public class CornManager : MonoBehaviour SetResult(CornResult.Good); } }).AddTo(compositeDisposable); + + // 進捗によってコーンを増やす(演出用) + var amount = 5; + var times = cornAddCount / amount; + progress + .Where(x => x >= willFinishValue) + .Take(1) + .AsUnitObservable() + .Concat(Observable.TimerFrame(0,1).AsUnitObservable()) + .Take(times) + .Subscribe(_ => + { + Observable.Range(0, amount).Subscribe(__ => + { + var corn = Instantiate(cornPrefab, cornSpawnTarget); + corn.SetCornProperty(0f, isHot ? 0f : 3f, cornSpillSpeed, cornPopSpeed); + cornGrowSpeed.TakeWhile(x => !isCompleted).Subscribe(x => + { + // コーンが弾けた後はRedの場合のみ焦げ進行する + if (corn.Condition.Value == CornCondition.Simple && !isHot) + { + corn.ChangeGrowSpeed(0f); + return; + } + + corn.ChangeGrowSpeed(x); + corn.ChangeHotStatus(isHot); + }).AddTo(compositeDisposable); + }).AddTo(compositeDisposable); + }).AddTo(compositeDisposable); } public void ChangeGrowSpeed(ThermalCondition condition)