ポップコーンの完成間際にコーンを増やす演出を追加

This commit is contained in:
kimura 2022-04-25 18:27:09 +09:00
parent e27bf25bc6
commit e041988c18
3 changed files with 47 additions and 16 deletions

View File

@ -4380,6 +4380,8 @@ MonoBehaviour:
cornPopSpeed: 30 cornPopSpeed: 30
screenKoProbability: 0.2 screenKoProbability: 0.2
maxScreenKoCount: 1 maxScreenKoCount: 1
willFinishValue: 0.798
cornAddCount: 50
cornCountSlider: {fileID: 657773260} cornCountSlider: {fileID: 657773260}
faildCountSlider: {fileID: 657773259} faildCountSlider: {fileID: 657773259}
coldGrowSpeedSlider: {fileID: 1661453984} coldGrowSpeedSlider: {fileID: 1661453984}

View File

@ -99,6 +99,12 @@ public class Corn : MonoBehaviour
case CornCondition.Seed: case CornCondition.Seed:
break; break;
case CornCondition.Simple: case CornCondition.Simple:
// コーンが弾けたとき、GrowSpeedを再設定する
// ThermalCondition.Hot以外では焦げ進行なし
if (!isHot)
{
ChangeGrowSpeed(0f);
}
CornPop(); CornPop();
break; break;
case CornCondition.Burnt: case CornCondition.Burnt:

View File

@ -32,6 +32,9 @@ public class CornManager : MonoBehaviour
[Space] [Space]
[SerializeField, Range(0,1)] private float screenKoProbability; [SerializeField, Range(0,1)] private float screenKoProbability;
[SerializeField] private int maxScreenKoCount; [SerializeField] private int maxScreenKoCount;
[Header("演出で増やすコーン")]
[SerializeField, Range(0, 1)] private float willFinishValue = 0.6f;
[SerializeField] private int cornAddCount = 40;
public IReadOnlyReactiveProperty<CornResult> Result => result; public IReadOnlyReactiveProperty<CornResult> Result => result;
private readonly ReactiveProperty<CornResult> result = new ReactiveProperty<CornResult>(); private readonly ReactiveProperty<CornResult> result = new ReactiveProperty<CornResult>();
@ -132,18 +135,13 @@ public class CornManager : MonoBehaviour
compositeDisposable.Clear(); compositeDisposable.Clear();
cornConditions.Clear(); cornConditions.Clear();
progress.Value = 0f; progress.Value = 0f;
for (int i = 0; i < cornArray.Length; i++) cornSpawnTarget.DestroyAllChildrens();
{
if (cornArray[i] != null)
{
Destroy(cornArray[i].gameObject);
}
}
cornArray = new Corn[cornSpawnCount]; cornArray = new Corn[cornSpawnCount];
// コーン生成 // コーン生成
var shuffledArray = Enumerable.Range(0, cornSpawnCount).OrderBy(_ => Random.value).ToArray(); var shuffledArray = Enumerable.Range(0, cornArray.Length).OrderBy(_ => Random.value).ToArray();
for (int i = 0; i < cornSpawnCount; i++)
for (int i = 0; i < cornArray.Length; i++)
{ {
var corn = Instantiate(cornPrefab, cornSpawnTarget); var corn = Instantiate(cornPrefab, cornSpawnTarget);
cornArray[i] = corn; cornArray[i] = corn;
@ -179,12 +177,6 @@ public class CornManager : MonoBehaviour
case CornCondition.Seed: case CornCondition.Seed:
break; break;
case CornCondition.Simple: case CornCondition.Simple:
// コーンが弾けたとき、GrowSpeedを再設定する
// ThermalCondition.Hot以外では焦げ進行なし
if (!isHot)
{
corn.ChangeGrowSpeed(0f);
}
break; break;
case CornCondition.Burnt: case CornCondition.Burnt:
// ミス数加算 // ミス数加算
@ -201,8 +193,9 @@ public class CornManager : MonoBehaviour
cornConditions.Add(corn.Condition); cornConditions.Add(corn.Condition);
} }
var cornConditionsObservable = Observable.CombineLatest(cornConditions).Publish().RefCount(); var cornConditionsObservable = cornConditions.CombineLatest().Publish().RefCount();
// コーン全体の進捗
cornConditionsObservable cornConditionsObservable
.Select(x => x.Count(cond => cond != CornCondition.Seed)) .Select(x => x.Count(cond => cond != CornCondition.Seed))
.Subscribe(x => .Subscribe(x =>
@ -230,6 +223,36 @@ public class CornManager : MonoBehaviour
SetResult(CornResult.Good); SetResult(CornResult.Good);
} }
}).AddTo(compositeDisposable); }).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) public void ChangeGrowSpeed(ThermalCondition condition)