change gamemanager
This commit is contained in:
parent
9fcb809215
commit
d83a12f741
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using UniRx;
|
using UniRx;
|
||||||
using UniRx.Diagnostics;
|
|
||||||
using UniRx.Triggers;
|
using UniRx.Triggers;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
|
@ -8,7 +7,12 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
{
|
{
|
||||||
public class GameManager : MonoBehaviour
|
public class GameManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
public enum State
|
public enum MenuState
|
||||||
|
{
|
||||||
|
StageSelect,
|
||||||
|
Game,
|
||||||
|
}
|
||||||
|
public enum GameState
|
||||||
{
|
{
|
||||||
Ready,
|
Ready,
|
||||||
Play,
|
Play,
|
||||||
|
|
@ -16,55 +20,57 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
Failure
|
Failure
|
||||||
}
|
}
|
||||||
|
|
||||||
[SerializeField] private float speed = 1f;
|
|
||||||
[SerializeField] private float jumpTime = .8f;
|
|
||||||
[SerializeField] private float jumpHeight = 2f;
|
|
||||||
[SerializeField] private float timeLimit = 30f;
|
[SerializeField] private float timeLimit = 30f;
|
||||||
[SerializeField] private HeaderView headerView;
|
[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;
|
private IDisposable timerDisposable;
|
||||||
|
|
||||||
// Start is called before the first frame update
|
// Start is called before the first frame update
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
|
menuState.AddTo(this);
|
||||||
state.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()
|
this.UpdateAsObservable()
|
||||||
|
.Where(_ => menuState.Value == MenuState.Game)
|
||||||
.Where(_ => Input.GetMouseButtonDown(0))
|
.Where(_ => Input.GetMouseButtonDown(0))
|
||||||
// .Debug("tap")
|
|
||||||
.Subscribe(_ =>
|
.Subscribe(_ =>
|
||||||
{
|
{
|
||||||
ChangeState();
|
state.Value = GameState.Play;
|
||||||
}).AddTo(this);
|
}).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 =>
|
state.Subscribe(x =>
|
||||||
{
|
{
|
||||||
switch (x)
|
switch (x)
|
||||||
{
|
{
|
||||||
case State.Ready:
|
case GameState.Ready:
|
||||||
|
timerDisposable?.Dispose();
|
||||||
headerView.ResetView();
|
headerView.ResetView();
|
||||||
headerView.ChangeTimeCount(timeLimit);
|
headerView.ChangeTimeCount(timeLimit);
|
||||||
break;
|
break;
|
||||||
case State.Play:
|
case GameState.Play:
|
||||||
timerDisposable?.Dispose();
|
timerDisposable?.Dispose();
|
||||||
timerDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f))
|
timerDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f))
|
||||||
.Select(time => (int)(timeLimit - time))
|
.Select(time => (int)(timeLimit - time))
|
||||||
|
|
@ -76,16 +82,33 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
{
|
{
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
break;
|
break;
|
||||||
case State.Success:
|
case GameState.Success:
|
||||||
break;
|
break;
|
||||||
case State.Failure:
|
case GameState.Failure:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ArgumentOutOfRangeException(nameof(x), x, null);
|
throw new ArgumentOutOfRangeException(nameof(x), x, null);
|
||||||
}
|
}
|
||||||
}).AddTo(this);
|
}).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>();
|
var item = x.GetComponent<StageItem>();
|
||||||
if (item is null)
|
if (item is null)
|
||||||
|
|
@ -103,49 +126,5 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
}
|
}
|
||||||
}).AddTo(this);
|
}).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