view整理

This commit is contained in:
kimura 2021-09-21 12:24:43 +09:00
parent 07af2b779e
commit 72cacb3abd
3 changed files with 62 additions and 80 deletions

View File

@ -17,9 +17,6 @@ public class PopcornGameManager : MonoBehaviour
{
// View
[SerializeField] private PopcornGameView gameView;
[SerializeField] private GameObject perfectResultObject;
[SerializeField] private GameObject goodResultObject;
[SerializeField] private GameObject failureResultObject;
[SerializeField] private ThermalControl thermalControl;
[SerializeField] private ThermoMeter thermoMeter;
@ -29,7 +26,6 @@ public class PopcornGameManager : MonoBehaviour
[SerializeField] private Button resetButton;
#endif
public IReadOnlyReactiveProperty<GameState> State => state;
private readonly ReactiveProperty<GameState> state = new ReactiveProperty<GameState>(GameState.Guide);
private readonly CompositeDisposable compositeDisposable = new CompositeDisposable();
@ -37,14 +33,36 @@ public class PopcornGameManager : MonoBehaviour
void Start()
{
compositeDisposable.AddTo(this);
state.AddTo(this);
thermalControl.Condition.Subscribe(x =>
{
cornManager.ChangeGrowSpeed(x);
gameView.ChangeCharactorState(x);
gameView.ChangeCharacterState(x);
}).AddTo(this);
state.Subscribe(x => cornManager.GameState.Value = x);
state.Subscribe(x =>
{
cornManager.GameState.Value = x;
gameView.ChangeUI(x);
switch (x)
{
case GameState.Guide:
thermalControl.ResetMeter();
cornManager.RespawnCorn();
thermoMeter.gameObject.SetActive(false);
break;
case GameState.Playing:
thermoMeter.gameObject.SetActive(true);
thermalControl.StartMeter();
break;
case GameState.Result:
thermalControl.StopMeter();
break;
default:
throw new ArgumentOutOfRangeException(nameof(x), x, null);
}
});
ResetGame();
@ -87,33 +105,22 @@ public class PopcornGameManager : MonoBehaviour
.Subscribe(x =>
{
state.Value = GameState.Result;
thermalControl.StopMeter();
gameView.ChangeCharactorState(ThermalCondition.Cold);
gameView.ChangeFireState(false);
gameView.ChangeStreamState(true);
// リザルト表示遅延
this.CallWaitForSeconds(1.2f, () =>
{
SetResult(x);
// popup
// CornResult
// 動画を見たあと、大成功にするための処理・・・?
// というか1つのシーンにしてしまうか
if (x != CornResult.Failure)
{
AddStock();
var recipe = LocalCacheManager.Load<RecipeData>(RecipeDetailView.DetailRecipeTag);
AddStock(recipe);
}
// 画面タップで次へ
this.UpdateAsObservable()
.Select(_ => Input.GetMouseButton(0))
.DistinctUntilChanged()
.Skip(1)
.FirstOrDefault(b => b)
.DelaySubscription(TimeSpan.FromSeconds(1f))
.Subscribe(_ =>
{
// ResetGame();
TransitionManager.Instance.LoadScene(GameScenes.Main);
}).AddTo(compositeDisposable);
});
}).AddTo(compositeDisposable);
// 画面タップでスタート
this.UpdateAsObservable()
.Select(_ => Input.GetMouseButton(0))
.DistinctUntilChanged()
@ -121,56 +128,14 @@ public class PopcornGameManager : MonoBehaviour
.FirstOrDefault(b => b)
.Subscribe(_ =>
{
StartGame();
state.Value = GameState.Playing;
}).AddTo(compositeDisposable);
ResetUI();
thermalControl.ResetMeter();
cornManager.RespawnCorn();
state.Value = GameState.Guide;
}
private void ResetUI()
private void AddStock(RecipeData recipe)
{
gameView.ResetUI();
perfectResultObject.SetActive(false);
goodResultObject.SetActive(false);
failureResultObject.SetActive(false);
thermalControl.StopMeter();
thermoMeter.gameObject.SetActive(false);
}
private void StartGame()
{
gameView.ChangeGuideState(false);
gameView.ChangeFireState(true);
thermoMeter.gameObject.SetActive(true);
thermalControl.StartMeter();
state.Value = GameState.Playing;
}
private void SetResult(CornResult result)
{
switch (result)
{
case CornResult.Perfect:
perfectResultObject.SetActive(true);
break;
case CornResult.Good:
goodResultObject.SetActive(true);
break;
case CornResult.Failure:
failureResultObject.SetActive(true);
break;
default:
throw new ArgumentOutOfRangeException(nameof(result), result, null);
}
}
private void AddStock()
{
var recipe = LocalCacheManager.Load<RecipeData>(RecipeDetailView.DetailRecipeTag);
var gameData = GameDataManager.GameData;
// 店頭の空きに追加
var remain = recipe.Volume;

View File

@ -10,31 +10,47 @@ public class PopcornGameView : MonoBehaviour
[SerializeField] private GameObject characterSweat;
[SerializeField] private GameObject characterFlower;
public void ResetUI()
public void ChangeUI(GameState state)
{
switch (state)
{
case GameState.Guide:
ChangeGuideState(true);
ChangeFireState(false);
ChangeCharactorState(ThermalCondition.Cold);
ChangeStreamState(false);
ChangeCharacterState(ThermalCondition.Cold);
break;
case GameState.Playing:
ChangeGuideState(false);
ChangeFireState(true);
break;
case GameState.Result:
ChangeFireState(false);
ChangeStreamState(true);
ChangeCharacterState(ThermalCondition.Cold);
break;
default:
throw new ArgumentOutOfRangeException(nameof(state), state, null);
}
}
public void ChangeGuideState(bool isActive)
private void ChangeGuideState(bool isActive)
{
startingGuide.SetActive(isActive);
}
public void ChangeFireState(bool isActive)
private void ChangeFireState(bool isActive)
{
fire.SetActive(isActive);
oilEffect.SetActive(isActive);
}
public void ChangeStreamState(bool isActive)
private void ChangeStreamState(bool isActive)
{
streamEffect.SetActive(isActive);
}
public void ChangeCharactorState(ThermalCondition condition)
public void ChangeCharacterState(ThermalCondition condition)
{
switch (condition)
{

View File

@ -156,9 +156,10 @@ public class ThermalControl : MonoBehaviour
public void ResetMeter()
{
isMove = false;
temperatureSpeed = 0f;
temperature = 0f;
thermoMeter.SetValue(temperature);
temperatureSpeed = 0f;
SetMeterValue();
thermoMeter.SetScale(coldValue, hotValue);
panController.ResetTargetPosition();