diff --git a/popcorn/Assets/MyGame/Scenes/CornField/CornField.unity b/popcorn/Assets/MyGame/Scenes/CornField/CornField.unity index 45fc6275..679e8c04 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/CornField.unity +++ b/popcorn/Assets/MyGame/Scenes/CornField/CornField.unity @@ -421,6 +421,7 @@ GameObject: - component: {fileID: 536970160} - component: {fileID: 536970159} - component: {fileID: 536970158} + - component: {fileID: 536970161} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -493,6 +494,22 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &536970161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 536970157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56666c5a40171f54783dd416a44f42bf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EventMask: + serializedVersion: 2 + m_Bits: 23 + m_MaxRayIntersections: 0 --- !u!1 &619114158 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab b/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab index 35c5f253..2e63baef 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab +++ b/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab @@ -415,7 +415,7 @@ BoxCollider2D: m_Enabled: 1 m_Density: 1 m_Material: {fileID: 0} - m_IsTrigger: 0 + m_IsTrigger: 1 m_UsedByEffector: 0 m_UsedByComposite: 0 m_Offset: {x: 0, y: -0.74168634} @@ -496,6 +496,5 @@ MonoBehaviour: seedlingStage2: {fileID: 875275074190396077} seedlingStage3: {fileID: 875275073577674106} seedlingStage4: {fileID: 875275074368017847} - stage4Collider: {fileID: 3560956324713403295} growingArrowPrefab: {fileID: 4493492865567033234, guid: b3d641214f420f74290147d368b221fa, type: 3} diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornField.cs b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornField.cs index e2a15194..3b275b7d 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornField.cs +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornField.cs @@ -15,13 +15,18 @@ public class CornField : MonoBehaviour private readonly List plants = new List(); private static readonly float maxPeriod = 60f; private static readonly float minPeriod = 45f; + + private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); // Start is called before the first frame update void Start() { + compositeDisposable.AddTo(this); this.UpdateAsObservable() .Where(_ => Input.GetKeyDown(KeyCode.R)) .Take(1) .Subscribe(_ => TransitionManager.Instance.LoadScene(GameScenes.CornField)).AddTo(this); + + var settings = new DateTime[3] { DateTime.Now, @@ -42,7 +47,17 @@ public class CornField : MonoBehaviour for (int i = 0; i < plants.Count; i++) { var period = 30 + Random.Range(0, 15); - plants[i].SetSeedlingGene(settings[i], period, SeedlingRank.Rank1); + var ii = i; + plants[ii].SetSeedlingGene(settings[ii], period, SeedlingRank.Rank1); + plants[ii].Harvested.Subscribe(_ => + { + // 収穫 + Debug.Log($"harvested"); + // 新しい苗 + period = 30 + Random.Range(0, 15); + settings[ii] = DateTime.Now; + plants[ii].SetSeedlingGene(settings[ii], period, SeedlingRank.Rank1); + }).AddTo(compositeDisposable); } promoteGrowthButton.OnClickAsObservable().Subscribe(_ => @@ -54,7 +69,7 @@ public class CornField : MonoBehaviour plants[i].PromoteGrowth(settings[i]); }; } - }); + }).AddTo(compositeDisposable); } // Update is called once per frame diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs index edff399d..8ba1687f 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs @@ -1,6 +1,7 @@ using System; using UniRx; using UnityEngine; +using UnityEngine.EventSystems; public enum SeedlingStage { @@ -18,7 +19,7 @@ public enum SeedlingRank Rank3 } -public class CornSeedling : MonoBehaviour +public class CornSeedling : MonoBehaviour, IPointerEnterHandler { [SerializeField] private CornSeedlingView seedlingView; private static readonly float stage0End = 0.25f; @@ -31,11 +32,14 @@ public class CornSeedling : MonoBehaviour private SeedlingRank seedlingRank; // 苗の良さ(1~3 private bool completed; + public IObservable Harvested => harvested; + private readonly Subject harvested = new Subject(); private readonly ReactiveProperty seedlingStage = new ReactiveProperty(); private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); private void Start() { + harvested.AddTo(this); seedlingStage.AddTo(this); compositeDisposable.AddTo(this); } @@ -67,10 +71,18 @@ public class CornSeedling : MonoBehaviour seedlingRank = rank; // resume対応 - // 途中からの場合アニメーションを勧めておく処理 + // 苗の状態復元 seedlingView.SetView(GetCurrentStage()); - // 成長ロジック + // 成長進捗度更新 + Observable.Interval(TimeSpan.FromSeconds(1f)) + .TakeWhile(_ => !completed) + .Subscribe(x => + { + UpdateStage(); + }).AddTo(compositeDisposable); + + // 更新 seedlingStage .TakeWhile(_ => !completed) .Subscribe(x => @@ -81,14 +93,6 @@ public class CornSeedling : MonoBehaviour completed = true; } }).AddTo(compositeDisposable); - - // 成長進捗度 - Observable.Interval(TimeSpan.FromSeconds(1f)) - .TakeWhile(_ => !completed) - .Subscribe(x => - { - UpdateStage(); - }).AddTo(compositeDisposable); } private void UpdateStage() @@ -118,4 +122,9 @@ public class CornSeedling : MonoBehaviour } return SeedlingStage.Stage0; } + + public void OnPointerEnter(PointerEventData eventData) + { + harvested.OnNext(Unit.Default); + } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedlingView.cs b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedlingView.cs index 5ef84840..51ef4e2c 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedlingView.cs +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedlingView.cs @@ -1,5 +1,8 @@ using System; +using System.Runtime.CompilerServices; +using UniRx; using UnityEngine; +using UnityEngine.EventSystems; public class CornSeedlingView : MonoBehaviour { @@ -7,10 +10,9 @@ public class CornSeedlingView : MonoBehaviour [SerializeField] private GameObject seedlingStage2; [SerializeField] private GameObject seedlingStage3; [SerializeField] private GameObject seedlingStage4; - [SerializeField] private Collider2D stage4Collider; [SerializeField] private GameObject growingArrowPrefab; private readonly int nextStageTriggerHash = Animator.StringToHash("NextStageTrigger"); - + public void ResetView() { seedlingStage1.SetActive(false); @@ -59,6 +61,10 @@ public class CornSeedlingView : MonoBehaviour { seedlingStage2.SetActive(true); }); + this.CallWaitForSeconds(.33f, () => + { + seedlingStage1.SetActive(false); + }); break; case SeedlingStage.Stage3: seedlingStage2.GetComponent().SetTrigger(nextStageTriggerHash); @@ -66,6 +72,10 @@ public class CornSeedlingView : MonoBehaviour { seedlingStage3.SetActive(true); }); + this.CallWaitForSeconds(.33f, () => + { + seedlingStage2.SetActive(false); + }); break; case SeedlingStage.Stage4: seedlingStage3.GetComponent().SetTrigger(nextStageTriggerHash); @@ -73,6 +83,10 @@ public class CornSeedlingView : MonoBehaviour { seedlingStage4.SetActive(true); }); + this.CallWaitForSeconds(.33f, () => + { + seedlingStage3.SetActive(false); + }); break; default: throw new ArgumentOutOfRangeException(nameof(stage), stage, null);