Merge branch 'develop' of bitbucket.org:usaya/popcorn into develop

This commit is contained in:
koya_15 2021-10-06 13:39:51 +09:00
commit a7f1c81b8b
11 changed files with 337 additions and 6242 deletions

View File

@ -1,5 +1,86 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &746832000
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 746832001}
- component: {fileID: 746832002}
m_Layer: 0
m_Name: MarketBrotherPink
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &746832001
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 746832000}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 5749156821563996369}
m_Father: {fileID: 3667080857874733261}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &746832002
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 746832000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6bf6e7fee6cf41a6bad181319bb8b8ed, type: 3}
m_Name:
m_EditorClassIdentifier:
animatorPrefab: {fileID: 7854448232971748898, guid: febae22cb9bba384992e30ac63891778,
type: 3}
pinkTransform: {fileID: 5749156821563996369}
walkSideBottomPos: -8
pinkWalkSpeed: 4
coolTime: 20
fewerBorder: 5
--- !u!1 &2089667968034057798
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5749156821563996369}
m_Layer: 0
m_Name: Target
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5749156821563996369
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2089667968034057798}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 746832001}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &3459593390050872226 --- !u!1 &3459593390050872226
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -9,10 +90,10 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 3667080857874733261} - component: {fileID: 3667080857874733261}
- component: {fileID: 1623805592074586917}
- component: {fileID: 7740671670896384492} - component: {fileID: 7740671670896384492}
- component: {fileID: 3756929251745663541} - component: {fileID: 3756929251745663541}
- component: {fileID: 5400893423074421525} - component: {fileID: 5400893423074421525}
- component: {fileID: 1623805592074586917}
m_Layer: 0 m_Layer: 0
m_Name: DontDestroyObject m_Name: DontDestroyObject
m_TagString: Untagged m_TagString: Untagged
@ -32,9 +113,22 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 3320409656134683753} - {fileID: 3320409656134683753}
- {fileID: 746832001}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1623805592074586917
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3459593390050872226}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 992ca0f9e68a447b8f3d9ea096088ae4, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &7740671670896384492 --- !u!114 &7740671670896384492
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -81,18 +175,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 77ded0026daa40d4b872efbaf2c1195c, type: 3} m_Script: {fileID: 11500000, guid: 77ded0026daa40d4b872efbaf2c1195c, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
--- !u!114 &1623805592074586917
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3459593390050872226}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 992ca0f9e68a447b8f3d9ea096088ae4, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &8739647597683206087 --- !u!1 &8739647597683206087
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -69,8 +69,28 @@ public class DebugOptionManager : MonoBehaviour
refillManyProductButton.OnClickAsObservable().Subscribe(_ => refillManyProductButton.OnClickAsObservable().Subscribe(_ =>
{ {
gameData.ShopStock = Enumerable.Repeat(1, 10).ToList(); gameData.ShopStock.Clear();
gameData.ShopStock.AddRange(Enumerable.Repeat(2, 10).ToList()); gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 1, Rarity = ProductRarity.Normal
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 2, Rarity = ProductRarity.Yellow
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 3, Rarity = ProductRarity.Copper
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 4, Rarity = ProductRarity.Silver
}, 5));
// gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
// {
// FlavorId = 5, Rarity = ProductRarity.Gold
// }, 5));
gameData.StorageTanks = new List<StorageTank> gameData.StorageTanks = new List<StorageTank>
{ {
// new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}}, // new StorageTank(){Id = 1, Capacity = 50, FlavorId = 1, Stocks = new List<ProductStockData>{new ProductStockData{Rarity = ProductRarity.Normal, Stock = 0}}},
@ -95,9 +115,27 @@ public class DebugOptionManager : MonoBehaviour
refillLittleProductButton.OnClickAsObservable().Subscribe(_ => refillLittleProductButton.OnClickAsObservable().Subscribe(_ =>
{ {
gameData.StorageTanks.ForEach(x => x.ClearStock()); gameData.StorageTanks.ForEach(x => x.ClearStock());
gameData.ShopStock = Enumerable.Repeat(2, 2).ToList(); gameData.ShopStock.Clear();
gameData.ShopStock = Enumerable.Repeat(1, 10).ToList(); gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
gameData.ShopStock.AddRange(Enumerable.Repeat(2, 10).ToList()); {
FlavorId = 1, Rarity = ProductRarity.Normal
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 2, Rarity = ProductRarity.Yellow
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 3, Rarity = ProductRarity.Copper
}, 5));
gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
{
FlavorId = 4, Rarity = ProductRarity.Silver
}, 5));
// gameData.ShopStock.AddRange(Enumerable.Repeat(new ProductStockData()
// {
// FlavorId = 5, Rarity = ProductRarity.Gold
// }, 5));
}).AddTo(this); }).AddTo(this);
coinCount.text = $"{gameData.Coin}"; coinCount.text = $"{gameData.Coin}";

View File

@ -65,12 +65,7 @@ public class KitchenManager : MonoBehaviour
{ {
gameData.Material = Enumerable.Range(1, 12).Select(x => new MaterialData(x, 0)).ToList(); gameData.Material = Enumerable.Range(1, 12).Select(x => new MaterialData(x, 0)).ToList();
} }
// 店頭ストック
if (gameData.ShopStock == null)
{
gameData.ShopStock = new List<int>();
}
// 保存タンク // 保存タンク
if (gameData.StorageTanks == null || gameData.StorageTanks.Count == 0) if (gameData.StorageTanks == null || gameData.StorageTanks.Count == 0)
{ {

View File

@ -498,7 +498,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 7854448232971748899} - component: {fileID: 7854448232971748899}
- component: {fileID: 7854448232971748898} - component: {fileID: 7854448232971748898}
- component: {fileID: 7854448232971748957}
- component: {fileID: 7854448232971748956} - component: {fileID: 7854448232971748956}
m_Layer: 0 m_Layer: 0
m_Name: Brother_pink m_Name: Brother_pink
@ -515,7 +514,7 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7854448232971748896} m_GameObject: {fileID: 7854448232971748896}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 4.96, y: -0.26, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 7854448232785489951} - {fileID: 7854448232785489951}
@ -545,24 +544,6 @@ Animator:
m_HasTransformHierarchy: 1 m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1 m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0 m_KeepAnimatorControllerStateOnDisable: 0
--- !u!114 &7854448232971748957
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7854448232971748896}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6bf6e7fee6cf41a6bad181319bb8b8ed, type: 3}
m_Name:
m_EditorClassIdentifier:
animator: {fileID: 7854448232971748898}
pinkTransform: {fileID: 7854448232971748899}
walkSideBottomPos: -8
pinkWalkSpeed: 4
coolTime: 20
fewerBorder: 5
--- !u!210 &7854448232971748956 --- !u!210 &7854448232971748956
SortingGroup: SortingGroup:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -1,8 +1,9 @@
using System;
using UniRx; using UniRx;
using UniRx.Triggers; using UniRx.Triggers;
using UnityEngine; using UnityEngine;
public class BrotherPinkView : MonoBehaviour public class BrotherPinkView : SingletonMonoBehaviour<BrotherPinkView>
{ {
private static readonly int Normal = Animator.StringToHash("Normal"); private static readonly int Normal = Animator.StringToHash("Normal");
private static readonly int Promotion = Animator.StringToHash("Promotion"); private static readonly int Promotion = Animator.StringToHash("Promotion");
@ -11,7 +12,7 @@ public class BrotherPinkView : MonoBehaviour
private static readonly Vector2 RightPos = new Vector2(4.96f, -0.26f); private static readonly Vector2 RightPos = new Vector2(4.96f, -0.26f);
private static readonly Vector2 LeftPos = new Vector2(-4.96f, -0.26f); private static readonly Vector2 LeftPos = new Vector2(-4.96f, -0.26f);
[SerializeField] private Animator animator; [SerializeField] private Animator animatorPrefab;
[SerializeField] private Transform pinkTransform; [SerializeField] private Transform pinkTransform;
[SerializeField] private float walkSideBottomPos; [SerializeField] private float walkSideBottomPos;
[SerializeField] private float pinkWalkSpeed = 4f; [SerializeField] private float pinkWalkSpeed = 4f;
@ -20,6 +21,7 @@ public class BrotherPinkView : MonoBehaviour
public int FewerBorder => fewerBorder; public int FewerBorder => fewerBorder;
private Animator animator;
private bool isManyCustomer; private bool isManyCustomer;
private bool isLocked; private bool isLocked;
private int nextId; private int nextId;
@ -34,8 +36,17 @@ public class BrotherPinkView : MonoBehaviour
private Vector2 wayPoint; private Vector2 wayPoint;
private float durationDelta; private float durationDelta;
private float completedDuration; private float completedDuration;
private void Awake()
{
nextId = Normal;
isManyCustomer = true;
Debug.Log($"normal");
}
private void Start() private void Start()
{ {
pinkTransform.localPosition = RightPos;
this.UpdateAsObservable().Subscribe(_ => this.UpdateAsObservable().Subscribe(_ =>
{ {
if (isManyCustomer || isLocked) if (isManyCustomer || isLocked)
@ -60,7 +71,7 @@ public class BrotherPinkView : MonoBehaviour
moveIndex = 0; moveIndex = 0;
isLocked = true; isLocked = true;
isManyCustomer = true; isManyCustomer = true;
animator.SetTrigger(nextId); if (animator != null) animator.SetTrigger(nextId);
this.CallWaitForSeconds(coolTime, () => this.CallWaitForSeconds(coolTime, () =>
{ {
isLocked = false; isLocked = false;
@ -72,10 +83,19 @@ public class BrotherPinkView : MonoBehaviour
}).AddTo(this); }).AddTo(this);
} }
public void Initialize() public void SetBrotherView(Transform target)
{ {
nextId = Normal; target.DestroyAllChildrens();
isManyCustomer = true; animator = Instantiate(animatorPrefab, target);
this.UpdateAsObservable().Subscribe(_ =>
{
target.localPosition = pinkTransform.localPosition;
target.localRotation = pinkTransform.localRotation;
}).AddTo(animator);
if (!isManyCustomer)
{
SetPinkMove();
}
} }
private void SetPinkMove() private void SetPinkMove()
@ -83,7 +103,7 @@ public class BrotherPinkView : MonoBehaviour
var move = pinkMoves[moveIndex]; var move = pinkMoves[moveIndex];
wayPoint = move.wayPoint; wayPoint = move.wayPoint;
completedDuration = move.wait; completedDuration = move.wait;
animator.SetTrigger(move.trigger); if (animator != null) animator.SetTrigger(move.trigger);
if (Vector2.Distance(wayPoint, pinkTransform.localPosition.ToVector2()) < .01f) if (Vector2.Distance(wayPoint, pinkTransform.localPosition.ToVector2()) < .01f)
{ {
// nop // nop
@ -99,14 +119,9 @@ public class BrotherPinkView : MonoBehaviour
private void SetTrigger(int id) private void SetTrigger(int id)
{ {
if (nextId == id)
{
return;
}
nextId = id; nextId = id;
if (isManyCustomer) if (isManyCustomer)
{ {
Debug.Log($"triggered");
animator.SetTrigger(id); animator.SetTrigger(id);
} }
} }

View File

@ -24,8 +24,8 @@ public class Market : SingletonMonoBehaviour<Market>
[SerializeField] private CustomerData customerData; [SerializeField] private CustomerData customerData;
[SerializeField] private CustomerController customerControllerPrefab; [SerializeField] private CustomerController customerControllerPrefab;
public List<int> DisplayFlavors => displayFlavors; public List<ProductStockData> DisplayFlavors => displayFlavors;
private List<int> displayFlavors = new List<int>(); private List<ProductStockData> displayFlavors = new List<ProductStockData>();
public List<int> ShuffledOrder => shuffledOrder; public List<int> ShuffledOrder => shuffledOrder;
private List<int> shuffledOrder = new List<int>(); private List<int> shuffledOrder = new List<int>();
@ -63,7 +63,7 @@ public class Market : SingletonMonoBehaviour<Market>
#endif #endif
// 陳列 // 陳列
displayFlavors = gameData.ShopStock.Select(x => x).ToList(); displayFlavors = gameData.ShopStock.ToList();
// 売り順決定 // 売り順決定
shuffledOrder = ShuffleOrder(displayFlavors.Count); shuffledOrder = ShuffleOrder(displayFlavors.Count);
@ -74,7 +74,7 @@ public class Market : SingletonMonoBehaviour<Market>
.Subscribe(_ => .Subscribe(_ =>
{ {
Debug.Log("displayFlavors updated"); Debug.Log("displayFlavors updated");
displayFlavors = gameData.ShopStock.Select(x => x).ToList(); displayFlavors = gameData.ShopStock.ToList();
shuffledOrder = ShuffleOrder(displayFlavors.Count); shuffledOrder = ShuffleOrder(displayFlavors.Count);
shopState.Value = ShopState.Open; shopState.Value = ShopState.Open;
}); });
@ -119,12 +119,7 @@ public class Market : SingletonMonoBehaviour<Market>
// 売り切れ // 売り切れ
if (shuffledOrder.Count == 0) if (shuffledOrder.Count == 0)
{ {
controller.SetWantFlavor(new ProductStockData controller.SetWantFlavor(displayFlavors.RandomChoose());
{
FlavorId = displayFlavors.RandomChoose(),
Rarity = ProductRarity.Normal,
Stock = 0
});
controller.CallWaitForSeconds(1.5f, () => controller.CallWaitForSeconds(1.5f, () =>
{ {
controller.SetComplain(); controller.SetComplain();
@ -144,19 +139,14 @@ public class Market : SingletonMonoBehaviour<Market>
continue; continue;
} }
// 在庫取得
var tmpOrderCount = Mathf.Min(controller.OrderCount, shuffledOrder.Count);
// shuffledOrder順に販売 // shuffledOrder順に販売
orders.AddRange(shuffledOrder.GetRange(0, tmpOrderCount)); var tmpOrderCount = Mathf.Min(controller.OrderCount, shuffledOrder.Count);
var tmpOrders = shuffledOrder.GetRange(0, tmpOrderCount);
shuffledOrder.RemoveRange(0, tmpOrderCount); shuffledOrder.RemoveRange(0, tmpOrderCount);
orders.AddRange(tmpOrders);
// コーンの味吹き出しを設定(レア度優先など // コーンの味吹き出しを設定
controller.SetWantFlavor(new ProductStockData controller.SetWantFlavor(displayFlavors[tmpOrders.RandomChoose()]);
{
FlavorId = orders.RandomChoose(),
Rarity = ProductRarity.Normal,
Stock = 0
});
} }
foreach (var customerController in dontBuyCustomerList) foreach (var customerController in dontBuyCustomerList)
{ {
@ -171,12 +161,8 @@ public class Market : SingletonMonoBehaviour<Market>
return; return;
} }
var flavors = orders.Select(x => (displayFlavors[x], ProductRarity.Normal)).ToList();
#if UNITY_EDITOR
Debug.Log($"bb order: {orders.Count} {orders.Aggregate("", (s, i) => $"{s},{i}")}");
Debug.Log($"bb shuffledOrder:{shuffledOrder.Count} {shuffledOrder.Aggregate("", (s, i) => $"{s},{i}")}");
#endif
// 購入 // 購入
var flavors = orders.Select(x => displayFlavors[x]).ToList();
var coin = SellPopcorn(flavors); var coin = SellPopcorn(flavors);
// 獲得処理 // 獲得処理
@ -184,14 +170,18 @@ public class Market : SingletonMonoBehaviour<Market>
gameData.Heart += customers.Count; gameData.Heart += customers.Count;
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
var remainStockCount = gameData.ShopStock.Count; // 商品補充
// 自動補充 refill
RefillShopStockData(); RefillShopStockData();
StockFlavorLog();
// 補充された場合フレーバー再設定 #if UNITY_EDITOR
var isReorder = RefillShopFlavors(orders, remainStockCount); StockFlavorLog();
Debug.Log($"ShopStock{gameData.ShopStock.Count}, {shuffledOrder.Count + orders.Count}");
Debug.Log($"displayCount:{displayFlavors.Count}\n" +
$"shuffled:{shuffledOrder.Count} {string.Join(",", shuffledOrder)}\n" +
$"orders:{orders.Count} {string.Join(",", orders)}");
#endif
// 表示データ更新
var isReorder = RefillDisplayFlavors(gameData.ShopStock, orders, shuffledOrder.Count);
this.CallWaitForSeconds(1.5f, () => this.CallWaitForSeconds(1.5f, () =>
{ {
@ -260,7 +250,6 @@ public class Market : SingletonMonoBehaviour<Market>
customerController.Setup(orderPosisionObject.transform.GetComponentsInChildren<Transform>().ToList().Skip(1).ToList()); customerController.Setup(orderPosisionObject.transform.GetComponentsInChildren<Transform>().ToList().Skip(1).ToList());
customerController.OrderCount = orderCount; customerController.OrderCount = orderCount;
customerController.CustomerPrefab = prefab; customerController.CustomerPrefab = prefab;
customerController.IsCustomer = isCustomer;
customerControllerList.Add(customerController); customerControllerList.Add(customerController);
customerController.MoveEndObservable customerController.MoveEndObservable
@ -278,10 +267,6 @@ public class Market : SingletonMonoBehaviour<Market>
Destroy(customerController.gameObject); Destroy(customerController.gameObject);
break; break;
case CustomerMovingType.WalkCenter: case CustomerMovingType.WalkCenter:
// if (shopState.Value == ShopState.Close)
// {
// customerController.ChangeCustomerState(CustomerState.Leave);
// }
if (customerController.State.Value == CustomerState.WalkShop) if (customerController.State.Value == CustomerState.WalkShop)
{ {
customerList.Add(customerController); customerList.Add(customerController);
@ -298,7 +283,7 @@ public class Market : SingletonMonoBehaviour<Market>
} }
}).AddTo(customerController); }).AddTo(customerController);
if (customerController.IsCustomer) if (isCustomer)
{ {
// 近くまで歩く(タップされたらcustomerList.Add() // 近くまで歩く(タップされたらcustomerList.Add()
customerController.ChangeCustomerState(CustomerState.WalkShop); customerController.ChangeCustomerState(CustomerState.WalkShop);
@ -322,6 +307,20 @@ public class Market : SingletonMonoBehaviour<Market>
}).AddTo(customerController); }).AddTo(customerController);
} }
}).AddTo(this); }).AddTo(this);
// お客さんが少なくなったら弟が走る
CustomerList.ObserveCountChanged(true).AsUnitObservable()
.Merge(Observable.Interval(TimeSpan.FromSeconds(1f)).AsUnitObservable())
.Where(_ => CurrentShopState.Value != ShopState.Close)
.Subscribe(_ =>
{
var count = CustomerList.Count(c => c.State.Value == CustomerState.Wait || c.State.Value == CustomerState.Order);
if (count < BrotherPinkView.Instance.FewerBorder)
{
Debug.Log($"market set walk");
BrotherPinkView.Instance.SetWalk();
}
}).AddTo(this);
} }
// お客さん出現パターン確率計算と行動パターン計算 // お客さん出現パターン確率計算と行動パターン計算
@ -375,7 +374,7 @@ public class Market : SingletonMonoBehaviour<Market>
return (false, GetOrderCount(false)); return (false, GetOrderCount(false));
} }
private int SellPopcorn(List<(int flavor, ProductRarity rarity)> flavors) private int SellPopcorn(List<ProductStockData> stockDataList)
{ {
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
// 品切れ // 品切れ
@ -385,17 +384,17 @@ public class Market : SingletonMonoBehaviour<Market>
} }
// フレーバーを売る // フレーバーを売る
var recipeList = RecipeData.GetAllRecipe(); var recipeList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);
var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList<RarityData>(Const.RarityDataSheet); var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList<RarityData>(Const.RarityDataSheet);
var coin = 0; var coin = 0;
foreach (var flavorData in flavors) foreach (var stockData in stockDataList)
{ {
var targetIndex = gameData.ShopStock.FindIndex(x => x == flavorData.flavor); var productData = recipeList.First(data => data.id == stockData.FlavorId);
var flavorRecipe = recipeList.First(data => data.RecipeId == gameData.ShopStock[targetIndex]); var rarityData = rarityList.First(data => data.Rarity == stockData.Rarity);
var rarityData = rarityList.First(data => data.Rarity == flavorData.rarity); var targetIndex = gameData.ShopStock.FindIndex(data => data.FlavorId == stockData.FlavorId && data.Rarity == stockData.Rarity);
gameData.ShopStock.RemoveAt(targetIndex); gameData.ShopStock.RemoveAt(targetIndex);
gameData.AddSalesCount(flavorData.flavor, 1, flavorData.rarity); gameData.AddSalesCount(stockData.FlavorId, 1, stockData.Rarity);
coin += flavorRecipe.Price * (1 + rarityData.rate / 100); coin += productData.price * (1 + rarityData.rate / 100);
} }
return coin; return coin;
} }
@ -412,46 +411,40 @@ public class Market : SingletonMonoBehaviour<Market>
// へらした分を店頭リストに追加する // へらした分を店頭リストに追加する
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
var shopSpace = ShopStockCount - gameData.ShopStock.Count; var shopSpace = ShopStockCount - gameData.ShopStock.Count;
var index = 0; foreach (var tank in gameData.StorageTanks.Where(tank => !tank.IsEmpty))
var tankCount = gameData.StorageTanks.Count;
while (shopSpace > 0)
{ {
if (index > tankCount - 1) if (shopSpace == 0)
{ {
break; break;
} }
var tank = gameData.StorageTanks[index];
var stockList = tank.GetStock(shopSpace); var stockList = tank.GetStock(shopSpace);
// レアの設定入れる gameData.ShopStock.AddRange(stockList);
gameData.ShopStock.AddRange(stockList.Select(x => x.FlavorId));
shopSpace -= stockList.Count; shopSpace -= stockList.Count;
gameData.StorageTanks[index] = tank;
index++;
} }
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
} }
private bool RefillShopFlavors(List<int> orders, int remainStockCount) private bool RefillDisplayFlavors(List<ProductStockData> shopStock, List<int> orders, int remain)
{ {
var gameData = GameDataManager.GameData; // 補充された場合店頭のフレーバー入れ替え
if (gameData.ShopStock.Count == ShopStockCount) if (shopStock.Count == ShopStockCount)
{ {
shuffledOrder.AddRange(orders); shuffledOrder.AddRange(orders);
var stock = gameData.ShopStock.GetRange(remainStockCount, orders.Count).ToArray(); var refillList = shopStock.GetRange(remain, orders.Count);
for (int i = 0; i < orders.Count; i++) for (int i = 0; i < orders.Count; i++)
{ {
displayFlavors[orders[i]] = stock[i]; displayFlavors[orders[i]] = refillList[i];
} }
} }
else if (gameData.ShopStock.Count <= 13 && shuffledOrder.Exists(x => x > 13)) else if (shopStock.Count <= 13 && shuffledOrder.Exists(x => x > 13))
{ {
displayFlavors = gameData.ShopStock.Select(x => x).ToList(); displayFlavors = shopStock.ToList();
shuffledOrder = ShuffleOrder(displayFlavors.Count); shuffledOrder = ShuffleOrder(displayFlavors.Count);
return true; return true;
} }
else if (gameData.ShopStock.Count <= 7 && shuffledOrder.Exists(x => x > 7)) else if (shopStock.Count <= 7 && shuffledOrder.Exists(x => x > 7))
{ {
displayFlavors = gameData.ShopStock.Select(x => x).ToList(); displayFlavors = shopStock.ToList();
shuffledOrder = ShuffleOrder(displayFlavors.Count); shuffledOrder = ShuffleOrder(displayFlavors.Count);
return true; return true;
} }
@ -477,7 +470,7 @@ public class Market : SingletonMonoBehaviour<Market>
var shopStockString = ""; var shopStockString = "";
foreach (var data in RecipeData.GetAllRecipe()) foreach (var data in RecipeData.GetAllRecipe())
{ {
var shopStockCount = GameDataManager.GameData.ShopStock.FindAll(x => x == data.RecipeId).Count; var shopStockCount = GameDataManager.GameData.ShopStock.FindAll(x => x.FlavorId == data.RecipeId).Count;
var tank = GameDataManager.GameData.StorageTanks.FindAll(x => x.FlavorId == data.RecipeId).Sum(x => x.Stock); var tank = GameDataManager.GameData.StorageTanks.FindAll(x => x.FlavorId == data.RecipeId).Sum(x => x.Stock);
if (shopStockCount + tank == 0) if (shopStockCount + tank == 0)
{ {

View File

@ -12,7 +12,7 @@ public class MarketManager : MonoBehaviour
[SerializeField] private ShopStockView stockView; [SerializeField] private ShopStockView stockView;
[SerializeField] private MarketCartView cartView; [SerializeField] private MarketCartView cartView;
[SerializeField] private BrotherBlueView blueView; [SerializeField] private BrotherBlueView blueView;
[SerializeField] private BrotherPinkView pinkView; [SerializeField] private Transform pinkTarget;
[SerializeField] private Transform coinPrefab; [SerializeField] private Transform coinPrefab;
[SerializeField] private Transform rootTransform; [SerializeField] private Transform rootTransform;
private Market market; private Market market;
@ -28,18 +28,10 @@ public class MarketManager : MonoBehaviour
market = Market.Instance; market = Market.Instance;
productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet); productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);
stockView.SetStock(gameData.StorageTanks); stockView.SetStock(gameData.StorageTanks);
var startStocks = market.DisplayFlavors var startStocks = market.ShuffledOrder.Select(x => (x, market.DisplayFlavors[x])).ToList();
.Select((flavor, index) => (flavor, index))
.Where(data => market.ShuffledOrder.Contains(data.index))
.Select(data => (data.index, new ProductStockData
{
FlavorId = data.flavor,
Rarity = ProductRarity.Gold,
}))
.ToList();
cartView.Initialize(); cartView.Initialize();
cartView.SetStock(startStocks, false); cartView.SetStock(startStocks, false);
pinkView.Initialize(); BrotherPinkView.Instance.SetBrotherView(pinkTarget);
// Customerの各アニメーション設定 // Customerの各アニメーション設定
foreach (var controller in market.CustomerControllerList) foreach (var controller in market.CustomerControllerList)
@ -78,28 +70,13 @@ public class MarketManager : MonoBehaviour
// 補充したフレーバーのスキンを設定 // 補充したフレーバーのスキンを設定
foreach (var order in x.orders) foreach (var order in x.orders)
{ {
cartView.Refill(order, new ProductStockData cartView.Refill(order, market.DisplayFlavors[order]);
{
FlavorId = market.DisplayFlavors[order],
Rarity = ProductRarity.Normal,
});
} }
} }
else if (x.isReorder) else if (x.isReorder)
{ {
#if UNITY_EDITOR
Debug.Log($"bb setStockFlag {market.DisplayFlavors.Count} {market.ShuffledOrder.Count}");
#endif
// 陳列表示更新(陳列13=650ms,7=350ms) // 陳列表示更新(陳列13=650ms,7=350ms)
var stocks = market.DisplayFlavors var stocks = market.ShuffledOrder.Select(i => (i, market.DisplayFlavors[i])).ToList();
.Select((flavor, index) => (flavor, index))
.Where(data => market.ShuffledOrder.Contains(data.index))
.Select(data => (data.index, new ProductStockData
{
FlavorId = data.flavor,
Rarity = ProductRarity.Normal,
}))
.ToList();
cartView.SetStock(stocks, true); cartView.SetStock(stocks, true);
} }
}); });
@ -114,7 +91,7 @@ public class MarketManager : MonoBehaviour
switch (state) switch (state)
{ {
case ShopState.Open: case ShopState.Open:
pinkView.SetNormal(); BrotherPinkView.Instance.SetNormal();
closeSign.SetActive(false); closeSign.SetActive(false);
break; break;
case ShopState.Busy: case ShopState.Busy:
@ -122,7 +99,7 @@ public class MarketManager : MonoBehaviour
case ShopState.Close: case ShopState.Close:
if (market.CustomerList.Count(x => x.State.Value == CustomerState.Order) == 0) if (market.CustomerList.Count(x => x.State.Value == CustomerState.Order) == 0)
{ {
pinkView.SetSleepy(); BrotherPinkView.Instance.SetSleepy();
closeSign.SetActive(true); closeSign.SetActive(true);
} }
else else
@ -136,7 +113,7 @@ public class MarketManager : MonoBehaviour
.Delay(TimeSpan.FromSeconds(2f)) .Delay(TimeSpan.FromSeconds(2f))
.Subscribe(_ => .Subscribe(_ =>
{ {
pinkView.SetSleepy(); BrotherPinkView.Instance.SetSleepy();
closeSign.SetActive(true); closeSign.SetActive(true);
}).AddTo(shopStateCompositeDisposable); }).AddTo(shopStateCompositeDisposable);
} }
@ -145,19 +122,6 @@ public class MarketManager : MonoBehaviour
throw new ArgumentOutOfRangeException(nameof(state), state, null); throw new ArgumentOutOfRangeException(nameof(state), state, null);
} }
}).AddTo(this); }).AddTo(this);
// お客さんが少なくなったら弟が走る
market.CustomerList.ObserveCountChanged(true).AsUnitObservable()
.Merge(Observable.Interval(TimeSpan.FromSeconds(1f)).AsUnitObservable())
.Where(_ => market.CurrentShopState.Value != ShopState.Close)
.Subscribe(_ =>
{
var count = market.CustomerList.Count(c => c.State.Value == CustomerState.Wait || c.State.Value == CustomerState.Order);
if (count < pinkView.FewerBorder)
{
pinkView.SetWalk();
}
}).AddTo(this);
} }
private void CoinEffect(int count) private void CoinEffect(int count)
@ -220,16 +184,22 @@ public class MarketManager : MonoBehaviour
}).AddTo(customerAnimator); }).AddTo(customerAnimator);
var eventTrigger = customerAnimator.gameObject.AddComponent<ObservableEventTrigger>(); var eventTrigger = customerAnimator.gameObject.AddComponent<ObservableEventTrigger>();
eventTrigger.OnPointerClickAsObservable() eventTrigger.OnPointerClickAsObservable()
.TakeWhile(_ => market.CurrentShopState.Value != ShopState.Close) .Where(_ => market.CurrentShopState.Value != ShopState.Close)
.Take(1) .Take(1)
.Subscribe(_ => .Subscribe(_ =>
{ {
controller.Tapped();
customerAnimator.ShowTapReaction();
if (customerAnimator.TryGetComponent(typeof(Collider2D), out var target)) if (customerAnimator.TryGetComponent(typeof(Collider2D), out var target))
{ {
Destroy(target); Destroy(target);
} }
if (controller.State.Value == CustomerState.Leave
|| controller.State.Value == CustomerState.EatingLeave
|| controller.State.Value == CustomerState.SadLeave)
{
return;
}
controller.Tapped();
customerAnimator.ShowTapReaction();
}).AddTo(customerAnimator); }).AddTo(customerAnimator);
} }
} }

View File

@ -42,7 +42,7 @@ public class ProductManagement : MonoBehaviour
}; };
// タンク並び替え // タンク並び替え
gameData.StorageTanks = gameData.StorageTanks.OrderBy(tank => tank.Stock == 0).ToList(); gameData.StorageTanks = gameData.StorageTanks.OrderBy(tank => tank.IsEmpty).ToList();
// タンク設定 // タンク設定
var tankList = view.SetTanks(priceList); var tankList = view.SetTanks(priceList);
@ -105,7 +105,9 @@ public class ProductManagement : MonoBehaviour
{ {
state.Value = ManagementState.None; state.Value = ManagementState.None;
var tankData = gameData.StorageTanks[tankView.TankNumber - 1]; var tankData = gameData.StorageTanks[tankView.TankNumber - 1];
var totalStock = gameData.ShopStock.Sum(x => x) + gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock); var shopStock = gameData.ShopStock.Count(data => data.FlavorId == tankData.FlavorId);
var tankStock = gameData.StorageTanks.Where(x => x.FlavorId == tankData.FlavorId).Sum(x => x.Stock);
var totalStock = shopStock + tankStock;
var recipe = RecipeData.GetRecipe(tankData.FlavorId); var recipe = RecipeData.GetRecipe(tankData.FlavorId);
var price = recipe?.Price ?? 0; var price = recipe?.Price ?? 0;
List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x => List<(ProductRarity rarity, int price, int stock)> raritySummaryData = rarityDataList.Select(x =>
@ -253,6 +255,7 @@ public class ProductManagement : MonoBehaviour
{ {
state.Value = ManagementState.None; state.Value = ManagementState.None;
GameDataManager.GameData.StorageTanks[tankNumber - 1].ClearStock(); GameDataManager.GameData.StorageTanks[tankNumber - 1].ClearStock();
GameDataManager.SaveGameData();
// 試食フラグに終了時間を設定 // 試食フラグに終了時間を設定
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -72,7 +72,7 @@ public class RecipeDetailView : MonoBehaviour
var gameData = GameDataManager.GameData; var gameData = GameDataManager.GameData;
// 在庫 // 在庫
var shopStock = gameData.ShopStock.FindAll(x => x == data.id).Count; var shopStock = gameData.ShopStock.Count(stockData => stockData.FlavorId == data.id);
var tankStock = gameData.StorageTanks.FindAll(x => x.FlavorId == data.id).Sum(x => x.Stock); var tankStock = gameData.StorageTanks.FindAll(x => x.FlavorId == data.id).Sum(x => x.Stock);
flavorStock.text = string.Format(flavorStockFormat, shopStock + tankStock); flavorStock.text = string.Format(flavorStockFormat, shopStock + tankStock);
flavorName.text = data.name; flavorName.text = data.name;

View File

@ -83,8 +83,7 @@ public sealed class GameData {
public List<MaterialData> Material = new List<MaterialData>(); public List<MaterialData> Material = new List<MaterialData>();
// 店頭ポップコーン在庫 // 店頭ポップコーン在庫
[DataMember(Name = "Data19")] [DataMember(Name = "Data19")]
private int[] shopStock; public List<ProductStockData> ShopStock;
public List<int> ShopStock;
// タンクポップコーン在庫 // タンクポップコーン在庫
[DataMember(Name = "Data20")] [DataMember(Name = "Data20")]
public List<StorageTank> StorageTanks; public List<StorageTank> StorageTanks;
@ -196,7 +195,7 @@ public sealed class GameData {
// avatarIdList = avatarIdArray == null ? new List<int>() : avatarIdArray.ToList(); // avatarIdList = avatarIdArray == null ? new List<int>() : avatarIdArray.ToList();
// newAvatarIdList = newAvatarIdArray == null ? new List<int>() : newAvatarIdArray.ToList(); // newAvatarIdList = newAvatarIdArray == null ? new List<int>() : newAvatarIdArray.ToList();
// lastAdRewardTimeList = lastAdRewardTimeArray == null ? new List<long>() : lastAdRewardTimeArray.ToList(); // lastAdRewardTimeList = lastAdRewardTimeArray == null ? new List<long>() : lastAdRewardTimeArray.ToList();
ShopStock = shopStock?.ToList() ?? new List<int>(); ShopStock = ShopStock ?? new List<ProductStockData>();
Pans = Pans ?? new int[0]; Pans = Pans ?? new int[0];
TotalSalesList = TotalSalesList ?? new List<ProductStockData>(); TotalSalesList = TotalSalesList ?? new List<ProductStockData>();
AchievedMission = achievedMission?.ToList() ?? new List<int>(); AchievedMission = achievedMission?.ToList() ?? new List<int>();
@ -214,7 +213,6 @@ public sealed class GameData {
// avatarIdArray = avatarIdList.ToArray(); // avatarIdArray = avatarIdList.ToArray();
// newAvatarIdArray = newAvatarIdList.ToArray(); // newAvatarIdArray = newAvatarIdList.ToArray();
// lastAdRewardTimeArray = lastAdRewardTimeList.ToArray(); // lastAdRewardTimeArray = lastAdRewardTimeList.ToArray();
shopStock = ShopStock.ToArray();
achievedMission = AchievedMission.ToArray(); achievedMission = AchievedMission.ToArray();
} }
private KeyValueOfintint[] DictionaryToArray(Dictionary<int, int> dictionary){ private KeyValueOfintint[] DictionaryToArray(Dictionary<int, int> dictionary){