Marketを設定クラスに対応

This commit is contained in:
kimura 2021-11-29 15:01:36 +09:00
parent 594a285814
commit cb6601de8a
2 changed files with 11 additions and 35 deletions

View File

@ -46,7 +46,7 @@ public class Title : MonoBehaviour
.Subscribe(t => .Subscribe(t =>
{ {
// 一般客orセレブ // 一般客orセレブ
var (isSpecial, orderCount) = Market.GetCustomerData(false); var (isSpecial, orderCount) = Market.Instance.GetCustomerData(false);
// 複数パターンある場合ChooseRandom // 複数パターンある場合ChooseRandom
var prefab = isSpecial ? customerData.ChooseSpecialPrefab() : customerData.ChooseNormalPrefab(); var prefab = isSpecial ? customerData.ChooseSpecialPrefab() : customerData.ChooseNormalPrefab();

View File

@ -2,6 +2,7 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MyGame.Scenes.marketing.Scripts;
using TMPro; using TMPro;
using UniRx; using UniRx;
using UniRx.Triggers; using UniRx.Triggers;
@ -18,21 +19,15 @@ public enum ShopState
public class Market : SingletonMonoBehaviour<Market> public class Market : SingletonMonoBehaviour<Market>
{ {
public static readonly int ShopStockCount = 20; public static readonly int ShopStockCount = 20;
private static readonly int SpecialOrderCount = 5;
private static readonly (int want, float weight)[] CustomerWeightTable = { // 購入時アニメーションタイミング
(1, 75f), private static readonly float waitSellTime = 1.5f;
(2, 15f), private static readonly float waitRefillTime = 1f;
(3, 3.5f),
(4, 1.25f),
(5, .25f),
(0, 5f),
};
private static readonly float walkerSpecialRate = .01f;
private static readonly float customerSpecialRate = .01f;
[SerializeField] private CustomerFlow customerFlow; [SerializeField] private CustomerFlow customerFlow;
[SerializeField] private GameObject orderPosisionObject; [SerializeField] private GameObject orderPosisionObject;
[SerializeField] private CustomerData customerData; [SerializeField] private CustomerData customerData;
[SerializeField] private CustomerSetting customerSetting;
[SerializeField] private CustomerController customerControllerPrefab; [SerializeField] private CustomerController customerControllerPrefab;
public List<ProductStockData> DisplayFlavors => displayFlavors; public List<ProductStockData> DisplayFlavors => displayFlavors;
@ -229,13 +224,13 @@ public class Market : SingletonMonoBehaviour<Market>
} }
} }
this.CallWaitForSeconds(1.5f, () => this.CallWaitForSeconds(waitSellTime, () =>
{ {
sellObservable.OnNext(coin); sellObservable.OnNext(coin);
sellOrderSubject.OnNext(orders); sellOrderSubject.OnNext(orders);
CheckStock(gameData.ShopStock); CheckStock(gameData.ShopStock);
this.CallWaitForSeconds(1f, () => this.CallWaitForSeconds(waitRefillTime, () =>
{ {
refillSubject.OnNext((isReorder, refillList)); refillSubject.OnNext((isReorder, refillList));
foreach (var controller in customers) foreach (var controller in customers)
@ -341,28 +336,9 @@ public class Market : SingletonMonoBehaviour<Market>
} }
public static (bool isSpecial, int orderCount) GetCustomerData (bool isCustomer) public (bool isSpecial, int orderCount) GetCustomerData (bool isCustomer)
{ {
var specialRate = isCustomer ? walkerSpecialRate : customerSpecialRate; return customerSetting.GetCustomerData(isCustomer);
var isSpecial = Random.value < specialRate;
// セレブは5個購入固定
return isSpecial ? (true, specialOrderCount: SpecialOrderCount) : (false, GetOrderCount());
}
// お客さん出現パターン確率計算と行動パターン計算
private static int GetOrderCount()
{
var randomPoint = Random.value * CustomerWeightTable.Sum(x => x.weight);
foreach (var value in CustomerWeightTable)
{
if (randomPoint < value.weight)
{
return value.want;
}
randomPoint -= value.weight;
}
return CustomerWeightTable.Last().want;
} }
private CustomerController SpawnCustomer() private CustomerController SpawnCustomer()