試食ポップアップ実装

This commit is contained in:
kimura 2021-09-15 18:56:48 +09:00
parent 99b2e9c039
commit 82d09102cb
10 changed files with 2015 additions and 1709 deletions

View File

@ -34,7 +34,19 @@ AnimatorController:
m_PrefabAsset: {fileID: 0}
m_Name: Window_mat
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorParameters:
- m_Name: OpenTrigger
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: CloseTrigger
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
@ -59,12 +71,13 @@ AnimatorStateMachine:
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: -5860134569191910913}
m_Position: {x: 200, y: 0, z: 0}
m_Position: {x: 300, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: 5199939482728463630}
m_Position: {x: 230, y: 60, z: 0}
m_Position: {x: 290, y: 120, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_AnyStateTransitions:
- {fileID: 1858806721725369727}
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
@ -73,6 +86,31 @@ AnimatorStateMachine:
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: -5860134569191910913}
--- !u!1101 &1858806721725369727
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: CloseTrigger
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 5199939482728463630}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &5199939482728463630
AnimatorState:
serializedVersion: 5

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0da1dd32f93cb4fe4881d732047679ec
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -89,7 +89,7 @@ public class ProductManagement : MonoBehaviour
tankView.SetData(tankData);
tankView.SetState(TankState.Unlock);
var totalStock = gameData.ShopStock.Sum(x => x) + gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock);
var recipe = RecipeData.GetAllRecipe().First(x => x.RecipeId == tankData.FlavorId);
var recipe = RecipeData.GetRecipe(tankData.FlavorId);
var price = recipe?.Price ?? 0;
List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x =>
(x.Rarity, price * x.rate / 100, tankData.Stocks.FirstOrDefault(sd => sd.Rarity == x.Rarity)?.Stock ?? 0)
@ -106,10 +106,12 @@ public class ProductManagement : MonoBehaviour
tankView.SetDetailButtonActive(x != ManagementState.Tasting);
}).AddTo(tankView);
}
state.Subscribe(x =>
var selectedTankSubject = new Subject<(int num, RecipeData recipe)>().AddTo(this);
var selectedTankObservable = selectedTankSubject.AsObservable();
state.Subscribe(mState =>
{
switch (x)
switch (mState)
{
case ManagementState.None:
ClearSelectedTank(tankList);
@ -117,14 +119,16 @@ public class ProductManagement : MonoBehaviour
case ManagementState.Replacing:
break;
case ManagementState.Tasting:
ClearSelectedTank(tankList);
// 1番目選択
ClearSelectedTank(tankList);
tankList[0].SetState(TankState.Selected);
// TastingシーンAdditive
// tasting閉じたあとの処理コールバックAction渡す
var tankData = gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankList[0].TankNumber - 1]);
selectedTankSubject.OnNext((1, RecipeData.GetRecipe(tankData.FlavorId)));
LocalCacheManager.Save(TastingView.TastingDataTag, (selectedTankObservable, new Action(() => state.Value = ManagementState.None), new Action<int>(Tasting)));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Tasting);
break;
default:
throw new ArgumentOutOfRangeException(nameof(x), x, null);
throw new ArgumentOutOfRangeException(nameof(mState), mState, null);
}
}).AddTo(this);
@ -146,6 +150,8 @@ public class ProductManagement : MonoBehaviour
case ManagementState.Tasting:
ClearSelectedTank(tankList);
tankView.SetState(TankState.Selected);
var tankData = gameData.StorageTanks.First(x => x.Id == gameData.TankOrder[tankView.TankNumber - 1]);
selectedTankSubject.OnNext((tankView.TankNumber, RecipeData.GetRecipe(tankData.FlavorId)));
break;
default:
throw new ArgumentOutOfRangeException();
@ -201,4 +207,10 @@ public class ProductManagement : MonoBehaviour
}
}
}
private void Tasting(int tankNumber)
{
state.Value = ManagementState.None;
Debug.Log($"tasting:{tankNumber}");
}
}

View File

@ -0,0 +1,45 @@
using System;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class TastingView : MonoBehaviour
{
public static readonly string TastingDataTag = "TastingData";
private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger");
private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger");
[SerializeField] private Animator backgroundAnimator;
[SerializeField] private Button closeButton;
[SerializeField] private Button tastingButton;
[SerializeField] private Text popcornName;
[SerializeField] private Image popcornImage;
[SerializeField] private Image packageImage;
private void Start()
{
var data = LocalCacheManager.Load<(IObservable<(int tankNum, RecipeData recipe)> selectedObservable, Action closeButtonAction, Action<int> tastingButtonAction)>(TastingDataTag);
data.selectedObservable.Subscribe(x =>
{
popcornName.text = x.recipe.Name;
}).AddTo(this);
closeButton.OnClickAsObservable().Subscribe(_ =>
{
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
data.closeButtonAction?.Invoke();
TransitionManager.Instance.UnloadScene(GameScenes.Tasting);
});
}).AddTo(this);
tastingButton.OnClickAsObservable().WithLatestFrom(data.selectedObservable, (_, x) => x.tankNum).Subscribe(tankNum =>
{
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
data.tastingButtonAction?.Invoke(tankNum);
TransitionManager.Instance.UnloadScene(GameScenes.Tasting);
});
}).AddTo(this);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6a0f7919d4584fa897c08e605da53e53
timeCreated: 1631692755

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
public class RecipeData
{
@ -10,6 +11,11 @@ public class RecipeData
public int CornAmount;
public List<(int id, int amount)> Flavors;
public static RecipeData GetRecipe(int flavorId)
{
return GetAllRecipe().FirstOrDefault(x => x.RecipeId == flavorId);
}
public static List<RecipeData> GetAllRecipe()
{
return new List<RecipeData>

View File

@ -17,6 +17,7 @@ public enum GameScenes
Purchase,
ProductManagement,
PopcornDescription,
Tasting,
SettingsDialog,
DebugOption,
UnableWatchVideoDialog,

View File

@ -29,6 +29,9 @@ EditorBuildSettings:
- enabled: 1
path: Assets/MyGame/Scenes/marketing/PopcornDescription.unity
guid: 8df4aed2b83d2eb48ab515858b956dd5
- enabled: 1
path: Assets/MyGame/Scenes/marketing/Tasting.unity
guid: 79a0196644bebaa49a6d8e1df6ada879
- enabled: 1
path: Assets/MyGame/Scenes/shopping/shopping.unity
guid: 9c9b9e2851656c84e91e3c457a81433d