diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs index e898d7f9..0f7a037d 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs @@ -121,6 +121,9 @@ namespace MyGame.Scenes.MiniGame.Scripts case StageItem.Type.Item1: headerView.AddCount(); break; + case StageItem.Type.Obstacle: + player.Hit(); + break; default: throw new ArgumentOutOfRangeException(); } diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs index 64c0f6c6..490b03b6 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs @@ -1,5 +1,6 @@ using System; using UniRx; +using UniRx.Diagnostics; using UniRx.Triggers; using UnityEngine; @@ -10,14 +11,23 @@ namespace MyGame.Scenes.MiniGame.Scripts [SerializeField] private float speed = 5f; [SerializeField] private float jumpTime = 1.25f; [SerializeField] private float jumpHeight = 5f; + [SerializeField] private float hitTime = 1.5f; + [SerializeField] private float hitWaitTime = 1f; private bool isJump; - + private readonly BoolReactiveProperty isHit = new BoolReactiveProperty(); + private IDisposable hitDisposable; + private void Start() { + isHit.AddTo(this); } public void Move() { + if (isHit.Value) + { + return; + } transform.AddPositionX(speed * Time.deltaTime); } @@ -38,5 +48,26 @@ namespace MyGame.Scenes.MiniGame.Scripts isJump = false; }); } + + // こける + public void Hit() + { + hitDisposable?.Dispose(); + // ジャンプが終わるのを待つ + hitDisposable = this.UpdateAsObservable().First(_ => !isJump).Debug("Hit").Subscribe(_ => + { + this.CallLerp(hitTime, t => + { + // transform.SetLocalPositionY(cachePos.y + Mathf.Sin(Mathf.PI * t) * jumpHeight); + }, () => + { + isHit.Value = true; + this.CallWaitForSeconds(hitWaitTime, () => + { + isHit.Value = false; + }); + }); + }).AddTo(this); + } } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageItem.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageItem.cs index 1cd91fb1..aca23d47 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageItem.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageItem.cs @@ -9,11 +9,15 @@ namespace MyGame.Scenes.MiniGame.Scripts { public enum Type { - Item1 + Item1, + Obstacle, } [SerializeField] private Type itemType; public Type ItemType => itemType; + [SerializeField] private int point; + + public int Point => point; private void Start() { @@ -22,7 +26,16 @@ namespace MyGame.Scenes.MiniGame.Scripts .Subscribe(_ => { // effect - gameObject.SetActive(false); + switch (itemType) + { + case Type.Item1: + gameObject.SetActive(false); + break; + case Type.Obstacle: + break; + default: + throw new ArgumentOutOfRangeException(); + } }).AddTo(this); } }