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

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
screenKoProbability: 0.2
maxScreenKoCount: 1
willFinishValue: 0.798
cornAddCount: 50
cornCountSlider: {fileID: 657773260}
faildCountSlider: {fileID: 657773259}
coldGrowSpeedSlider: {fileID: 1661453984}

View File

@ -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:

View File

@ -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<CornResult> Result => result;
private readonly ReactiveProperty<CornResult> result = new ReactiveProperty<CornResult>();
@ -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)