change gamemanager
This commit is contained in:
parent
9fcb809215
commit
d83a12f741
|
|
@ -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> menuState = new ReactiveProperty<MenuState>();
|
||||
private readonly ReactiveProperty<GameState> state = new ReactiveProperty<GameState>();
|
||||
|
||||
private readonly ReactiveProperty<State> state = new ReactiveProperty<State>();
|
||||
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;
|
||||
|
||||
this.UpdateAsObservable()
|
||||
.Where(_ => Input.GetMouseButtonDown(0))
|
||||
// .Debug("tap")
|
||||
.Subscribe(_ =>
|
||||
|
||||
|
||||
menuState.Subscribe(x =>
|
||||
{
|
||||
ChangeState();
|
||||
switch (x)
|
||||
{
|
||||
case MenuState.StageSelect:
|
||||
break;
|
||||
case MenuState.Game:
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(x), x, null);
|
||||
}
|
||||
}).AddTo(this);
|
||||
|
||||
var cameraTransform = Camera.main.transform;
|
||||
this.UpdateAsObservable()
|
||||
.Where(_ => state.Value == State.Play)
|
||||
.DelayFrame(1)
|
||||
.Where(_ => menuState.Value == MenuState.Game)
|
||||
.Where(_ => Input.GetMouseButtonDown(0))
|
||||
.Subscribe(_ =>
|
||||
{
|
||||
// カメラ移動
|
||||
cameraTransform.AddPositionX(speed * Time.deltaTime);
|
||||
// キャラクター移動
|
||||
characterTransform.AddPositionX(speed * Time.deltaTime);
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
Jump();
|
||||
}
|
||||
state.Value = GameState.Play;
|
||||
}).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<StageItem>();
|
||||
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<Rigidbody2D>().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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2273f282da84488498cab0d1b34f1d63
|
||||
timeCreated: 1655445441
|
||||
Loading…
Reference in New Issue