diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs index 2e879f36..e898d7f9 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs @@ -1,6 +1,5 @@ using System; using UniRx; -using UniRx.Diagnostics; using UniRx.Triggers; using UnityEngine; @@ -8,7 +7,12 @@ namespace MyGame.Scenes.MiniGame.Scripts { public class GameManager : MonoBehaviour { - public enum State + public enum MenuState + { + StageSelect, + Game, + } + public enum GameState { Ready, Play, @@ -16,55 +20,57 @@ namespace MyGame.Scenes.MiniGame.Scripts Failure } - [SerializeField] private float speed = 1f; - [SerializeField] private float jumpTime = .8f; - [SerializeField] private float jumpHeight = 2f; [SerializeField] private float timeLimit = 30f; [SerializeField] private HeaderView headerView; - [SerializeField] private Transform characterTransform; + [SerializeField] private Player player; + [SerializeField] private StageManager stageManager; + + private readonly ReactiveProperty menuState = new ReactiveProperty(); + private readonly ReactiveProperty state = new ReactiveProperty(); - private readonly ReactiveProperty state = new ReactiveProperty(); private IDisposable timerDisposable; // Start is called before the first frame update private void Start() { + menuState.AddTo(this); state.AddTo(this); - state.Value = State.Ready; + menuState.Value = MenuState.Game; + state.Value = GameState.Ready; + + + + menuState.Subscribe(x => + { + switch (x) + { + case MenuState.StageSelect: + break; + case MenuState.Game: + break; + default: + throw new ArgumentOutOfRangeException(nameof(x), x, null); + } + }).AddTo(this); this.UpdateAsObservable() + .Where(_ => menuState.Value == MenuState.Game) .Where(_ => Input.GetMouseButtonDown(0)) - // .Debug("tap") .Subscribe(_ => { - ChangeState(); + state.Value = GameState.Play; }).AddTo(this); - - var cameraTransform = Camera.main.transform; - this.UpdateAsObservable() - .Where(_ => state.Value == State.Play) - .DelayFrame(1) - .Subscribe(_ => - { - // カメラ移動 - cameraTransform.AddPositionX(speed * Time.deltaTime); - // キャラクター移動 - characterTransform.AddPositionX(speed * Time.deltaTime); - if (Input.GetMouseButtonDown(0)) - { - Jump(); - } - }).AddTo(this); - + state.Subscribe(x => { switch (x) { - case State.Ready: + case GameState.Ready: + timerDisposable?.Dispose(); headerView.ResetView(); headerView.ChangeTimeCount(timeLimit); break; - case State.Play: + case GameState.Play: timerDisposable?.Dispose(); timerDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f)) .Select(time => (int)(timeLimit - time)) @@ -76,16 +82,33 @@ namespace MyGame.Scenes.MiniGame.Scripts { }).AddTo(this); break; - case State.Success: + case GameState.Success: break; - case State.Failure: + case GameState.Failure: break; default: throw new ArgumentOutOfRangeException(nameof(x), x, null); } }).AddTo(this); - - characterTransform.OnTriggerEnter2DAsObservable().Subscribe(x => + + var playerTransform = player.transform; + var cameraTransform = Camera.main.transform; + var cameraOffset = cameraTransform.position - playerTransform.position.x * Vector3.right; + this.UpdateAsObservable() + .Where(_ => state.Value == GameState.Play) + .DelayFrame(1) + .Subscribe(_ => + { + player.Move(); + // カメラ移動 + cameraTransform.position = playerTransform.position.x * Vector3.right + cameraOffset; + if (Input.GetMouseButtonDown(0)) + { + player.Jump(); + } + }).AddTo(this); + + playerTransform.OnTriggerEnter2DAsObservable().Subscribe(x => { var item = x.GetComponent(); if (item is null) @@ -103,49 +126,5 @@ namespace MyGame.Scenes.MiniGame.Scripts } }).AddTo(this); } - - private bool isJump; - - private void Jump() - { - if (isJump) - { - return; - } - - isJump = true; - // Observable.Timer(TimeSpan.FromSeconds(.5f)).Subscribe(_ => - // { - // isJump = false; - // }).AddTo(this); - // var basePosY = characterTransform.position.y; - // characterTransform.GetComponent().AddForce(Vector2.up * height, ForceMode2D.Impulse); - var cachePos = characterTransform.localPosition; - this.CallLerp(jumpTime, t => - { - characterTransform.SetLocalPositionY(cachePos.y + Mathf.Sin(Mathf.PI * t) * jumpHeight); - }, () => - { - isJump = false; - }); - } - - private void ChangeState() - { - switch (state.Value) - { - case State.Ready: - state.Value = State.Play; - break; - case State.Play: - break; - case State.Success: - break; - case State.Failure: - 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 new file mode 100644 index 00000000..64c0f6c6 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs @@ -0,0 +1,42 @@ +using System; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace MyGame.Scenes.MiniGame.Scripts +{ + public class Player : MonoBehaviour + { + [SerializeField] private float speed = 5f; + [SerializeField] private float jumpTime = 1.25f; + [SerializeField] private float jumpHeight = 5f; + private bool isJump; + + private void Start() + { + } + + public void Move() + { + transform.AddPositionX(speed * Time.deltaTime); + } + + public void Jump() + { + if (isJump) + { + return; + } + + isJump = true; + var cachePos = transform.localPosition; + this.CallLerp(jumpTime, t => + { + transform.SetLocalPositionY(cachePos.y + Mathf.Sin(Mathf.PI * t) * jumpHeight); + }, () => + { + isJump = false; + }); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs.meta b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs.meta new file mode 100644 index 00000000..74ad47c3 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2273f282da84488498cab0d1b34f1d63 +timeCreated: 1655445441 \ No newline at end of file