Merge branch 'develop' of bitbucket.org:usaya/popcorn into develop

This commit is contained in:
koya_15 2021-07-07 16:37:42 +09:00
commit 4bc89a9f6a
4 changed files with 79 additions and 35 deletions

View File

@ -133,7 +133,7 @@ AnimationClip:
m_Level: 0 m_Level: 0
m_CycleOffset: 0 m_CycleOffset: 0
m_HasAdditiveReferencePose: 0 m_HasAdditiveReferencePose: 0
m_LoopTime: 1 m_LoopTime: 0
m_LoopBlend: 0 m_LoopBlend: 0
m_LoopBlendOrientation: 0 m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0 m_LoopBlendPositionY: 0

View File

@ -620,7 +620,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &460945447 --- !u!224 &460945447
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1028,7 +1028,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &642263094 --- !u!224 &642263094
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1513,7 +1513,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 0 m_IsActive: 1
--- !u!224 &832390347 --- !u!224 &832390347
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2612,7 +2612,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &1370567322 --- !u!224 &1370567322
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -7923,7 +7923,9 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
startingGuide: {fileID: 8786490829224139677} startingGuide: {fileID: 8786490829224139677}
gameResultText: {fileID: 1003859323} perfectResultObject: {fileID: 642263093}
goodResultObject: {fileID: 1370567321}
failureResultObject: {fileID: 460945446}
characterSweat: {fileID: 580170368} characterSweat: {fileID: 580170368}
characterFlower: {fileID: 785034261} characterFlower: {fileID: 785034261}
thermalControl: {fileID: 1870432535} thermalControl: {fileID: 1870432535}
@ -7986,7 +7988,7 @@ MonoBehaviour:
baseGrowSpeed: 1 baseGrowSpeed: 1
hotGrowSpeed: 1.5 hotGrowSpeed: 1.5
baseCornPopTime: 10 baseCornPopTime: 10
cornBurntDuration: 3 cornBurntDuration: 1
--- !u!1 &1928679189 --- !u!1 &1928679189
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -26,6 +26,7 @@ public class CornManager : MonoBehaviour
private Corn[] cornArray; private Corn[] cornArray;
private bool isHot; private bool isHot;
private bool isCompleted;
private List<IObservable<CornCondition>> cornConditions = new List<IObservable<CornCondition>>(); private List<IObservable<CornCondition>> cornConditions = new List<IObservable<CornCondition>>();
private readonly ReactiveProperty<float> cornGrowSpeed = new FloatReactiveProperty(0f); private readonly ReactiveProperty<float> cornGrowSpeed = new FloatReactiveProperty(0f);
private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); private readonly CompositeDisposable compositeDisposable = new CompositeDisposable();
@ -43,6 +44,7 @@ public class CornManager : MonoBehaviour
public void RespawnCorn() public void RespawnCorn()
{ {
isCompleted = false;
compositeDisposable.Clear(); compositeDisposable.Clear();
cornConditions.Clear(); cornConditions.Clear();
for (int i = 0; i < cornArray.Length; i++) for (int i = 0; i < cornArray.Length; i++)
@ -60,7 +62,7 @@ public class CornManager : MonoBehaviour
cornArray[i] = corn; cornArray[i] = corn;
corn.SetCornProperty(baseCornPopTime, cornBurntDuration); corn.SetCornProperty(baseCornPopTime, cornBurntDuration);
cornGrowSpeed.Subscribe(x => cornGrowSpeed.Where(_ => !isCompleted).Subscribe(x =>
{ {
// コーンが弾けた後はRedの場合のみ焦げ進行する // コーンが弾けた後はRedの場合のみ焦げ進行する
if (corn.Condition.Value == CornCondition.Simple && !isHot) if (corn.Condition.Value == CornCondition.Simple && !isHot)
@ -90,20 +92,22 @@ public class CornManager : MonoBehaviour
Observable.CombineLatest(cornConditions) Observable.CombineLatest(cornConditions)
.FirstOrDefault(x => !x.Contains(CornCondition.Seed)) .FirstOrDefault(x => !x.Contains(CornCondition.Seed))
.Subscribe(x => .Subscribe(x =>
{
if (x.Count(c => c == CornCondition.Simple) == x.Count) // すべてのコーンがPopped
{ {
result.SetValueAndForceNotify(CornResult.Perfect); isCompleted = true;
} cornGrowSpeed.Value = 0f;
else if (x.Count(c => c == CornCondition.Spilled) == x.Count) // すべてのコーンが飛び出した if (x.Count(c => c == CornCondition.Simple) == x.Count) // すべてのコーンがPopped
{ {
result.SetValueAndForceNotify(CornResult.Failure); result.SetValueAndForceNotify(CornResult.Perfect);
} }
else else if (x.Count(c => c == CornCondition.Spilled) == x.Count) // すべてのコーンが飛び出した
{ {
result.SetValueAndForceNotify(CornResult.Good); result.SetValueAndForceNotify(CornResult.Failure);
} }
}).AddTo(compositeDisposable); else
{
result.SetValueAndForceNotify(CornResult.Good);
}
}).AddTo(compositeDisposable);
} }
public void ChangeGrowSpeed(ThermalCondition condition) public void ChangeGrowSpeed(ThermalCondition condition)

View File

@ -17,8 +17,9 @@ public enum GameState
public class PopcornGameManager : MonoBehaviour public class PopcornGameManager : MonoBehaviour
{ {
[SerializeField] private GameObject startingGuide; [SerializeField] private GameObject startingGuide;
// [SerializeField] private Text powerResultText; [SerializeField] private GameObject perfectResultObject;
[SerializeField] private Text gameResultText; [SerializeField] private GameObject goodResultObject;
[SerializeField] private GameObject failureResultObject;
[SerializeField] private GameObject characterSweat; [SerializeField] private GameObject characterSweat;
[SerializeField] private GameObject characterFlower; [SerializeField] private GameObject characterFlower;
@ -28,6 +29,7 @@ public class PopcornGameManager : MonoBehaviour
public IReadOnlyReactiveProperty<GameState> State => state; public IReadOnlyReactiveProperty<GameState> State => state;
private readonly ReactiveProperty<GameState> state = new ReactiveProperty<GameState>(GameState.Guide); private readonly ReactiveProperty<GameState> state = new ReactiveProperty<GameState>(GameState.Guide);
private readonly CompositeDisposable compositeDisposable = new CompositeDisposable();
// Start is called before the first frame update // Start is called before the first frame update
@ -54,37 +56,73 @@ public class PopcornGameManager : MonoBehaviour
throw new ArgumentOutOfRangeException(nameof(x), x, null); throw new ArgumentOutOfRangeException(nameof(x), x, null);
} }
}).AddTo(this); }).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); }).AddTo(this);
ResetGame(); ResetGame();
// コーンマネージャからResultきたらStateもResult
}
private void Update()
{
} }
private void ResetUI() private void ResetUI()
{ {
startingGuide.SetActive(true); startingGuide.SetActive(true);
thermoMeter.gameObject.SetActive(false); perfectResultObject.SetActive(false);
gameResultText.text = ""; goodResultObject.SetActive(false);
failureResultObject.SetActive(false);
thermalControl.StopMeter(); thermalControl.StopMeter();
thermoMeter.gameObject.SetActive(false);
characterFlower.gameObject.SetActive(false); characterFlower.gameObject.SetActive(false);
characterSweat.gameObject.SetActive(false); characterSweat.gameObject.SetActive(false);
} }
private void ResetGame() private void ResetGame()
{ {
compositeDisposable.Clear();
this.UpdateAsObservable()
.Select(_ => Input.GetMouseButton(0))
.DistinctUntilChanged()
.Skip(1)
.FirstOrDefault(b => b)
.Subscribe(_ =>
{
StartGame();
}).AddTo(compositeDisposable);
ResetUI(); ResetUI();
thermalControl.ResetMeter(); thermalControl.ResetMeter();
cornManager.RespawnCorn(); cornManager.RespawnCorn();
state.Value = GameState.Guide;
} }
private void StartGame() private void StartGame()