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

This commit is contained in:
hirokei 2021-10-29 14:45:54 +09:00
commit e551edae50
34 changed files with 280 additions and 121 deletions

View File

@ -111,7 +111,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 600}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4293843006989820483
CanvasRenderer:

View File

@ -14768,7 +14768,7 @@ PrefabInstance:
- target: {fileID: 4293843006989820480, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
value: 600
objectReference: {fileID: 0}
- target: {fileID: 4293843006989820480, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
@ -14848,7 +14848,7 @@ PrefabInstance:
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_SizeDelta.y
value: 806.6114
value: 826.3005
objectReference: {fileID: 0}
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
@ -14858,12 +14858,12 @@ PrefabInstance:
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 173.4
value: 183.2
objectReference: {fileID: 0}
- target: {fileID: 7550014134400670843, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -565
value: 65
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1c993e9707f1a4fada56020be27dde28, type: 3}

View File

@ -948,7 +948,7 @@ MonoBehaviour:
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Transition: 0
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
@ -1750,7 +1750,7 @@ MonoBehaviour:
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Transition: 0
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}

View File

@ -98,7 +98,7 @@ public class CornField : MonoBehaviour
SetCornField();
upgradeButton.OnClickAsObservable().Subscribe(_ =>
upgradeButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcement.CornFieldResetCallbackTag, new Action(() => SetCornField()));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Reinforcement);

View File

@ -19,7 +19,7 @@ public class CornFieldReinforcement : MonoBehaviour
private void Start()
{
compositeDisposable.AddTo(this);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
LocalCacheManager.Remove(CornFieldReinforcementDataTypeTag);
LocalCacheManager.Remove(CornFieldReinforcementDataTag);
@ -53,7 +53,7 @@ public class CornFieldReinforcement : MonoBehaviour
view.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
view.SetReinforcement(lineData, price);
// 購入ボタン
view.ButtonClickObserve.Subscribe(_ =>
view.ButtonClickObserve.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, upgradeType);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (lineData, price, new Action(() => {
@ -71,7 +71,7 @@ public class CornFieldReinforcement : MonoBehaviour
view.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
view.SetRelease(price);
// 購入ボタン
view.ButtonClickObserve.Subscribe(_ =>
view.ButtonClickObserve.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, upgradeType);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (lineData = null, price, new Action(() => {
@ -97,7 +97,7 @@ public class CornFieldReinforcement : MonoBehaviour
machineUpgradeView.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
machineUpgradeView.SetData(gameData.MachineLevel, price);
// 購入ボタン
machineUpgradeView.ButtonClickObserve.Subscribe(_ =>
machineUpgradeView.ButtonClickObserve.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, CornFieldUpgradeType.Machine);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (gameData.MachineLevel, price, new Action(() => {

View File

@ -55,7 +55,7 @@ public class CornFieldReinforcementDetailView : MonoBehaviour
default:
throw new ArgumentOutOfRangeException();
}
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
@ -66,8 +66,11 @@ public class CornFieldReinforcementDetailView : MonoBehaviour
}).AddTo(this);
purchaseButton.OnClickAsObservable()
.Merge(releaseButton.OnClickAsObservable())
.Subscribe(_ =>
.Take(1)
.Subscribe(_ => { }, () =>
{
purchaseButton.interactable = false;
releaseButton.interactable = false;
// 購入処理
callback?.Invoke();
transform.SetLocalScale(0);

View File

@ -10,6 +10,7 @@ GameObject:
m_Component:
- component: {fileID: 9117079084301130545}
- component: {fileID: 9117079084301130544}
- component: {fileID: 8528884583953186477}
m_Layer: 5
m_Name: UICamera
m_TagString: Untagged
@ -74,3 +75,15 @@ Camera:
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!114 &8528884583953186477
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9117079084301130547}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c11194ed6fd84a1f812fa2cfae75f873, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@ -35,7 +35,7 @@ public class BulkOrder : MonoBehaviour
private void Start()
{
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -32,7 +32,7 @@ public class BulkOrderAchievedView : MonoBehaviour
messageText.text = messageList.First(data => data.id == gameData.OrderTextId).thanksText;
orderCharacterImage.sprite = bulkOrderCharacter.GetThanksIcon(gameData.OrderIconIndex);
}
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
if (LocalCacheManager.Load<Action>(BulkOrder.AchievedCallbackTag, null) is Action callback)
{

View File

@ -21,7 +21,7 @@ public class BulkOrderCancelView : MonoBehaviour
coinText.text = orderData.rewardCoin.ToString();
heartText.text = orderData.rewardHeart.ToString();
}
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
@ -30,7 +30,7 @@ public class BulkOrderCancelView : MonoBehaviour
TransitionManager.Instance.UnloadScene(GameScenes.BulkOrderCancel);
});
}).AddTo(this);
cancelButton.OnClickAsObservable().Subscribe(_ =>
cancelButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
if (LocalCacheManager.Load<Action>(BulkOrder.CancelCallbackTag, null) is Action callback)
{

View File

@ -64,7 +64,7 @@ public class BulkOrderNotifyView : MonoBehaviour
itemView3.SetActive(false);
}
}
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -43,7 +43,7 @@ public class Information : MonoBehaviour
private void Start()
{
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -23,7 +23,8 @@ public class KitchenManager : MonoBehaviour
void Start()
{
SoundManager.Instance.PlayBGM("bgm_Main");
// 実機でアプリ初回起動時にBGMならないの回避。1フレーム遅らせると鳴る
Observable.NextFrame().Subscribe(_ => SoundManager.Instance.PlayBGM("bgm_Main"));
var gameData = GameDataManager.GameData;
// レシピの表示

View File

@ -18,7 +18,7 @@ public class MissionCompleteView : MonoBehaviour
{
var (missionData, callback) = LocalCacheManager.Load< (MissionData, Action)>(MissionManager.MissionDataTag);
LocalCacheManager.Remove(MissionManager.MissionDataTag);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
callback?.Invoke();
transform.SetLocalScale(0);

View File

@ -22,7 +22,7 @@ public class MissionManager : MonoBehaviour
private void Start()
{
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
LocalCacheManager.Remove(MissionDataTag);
transform.SetLocalScale(0);
@ -76,7 +76,7 @@ public class MissionManager : MonoBehaviour
{
count = gameData.dailyMissionIdArray.Length,
reward = dailyMissionCompleteRewardCoin,
text = "デイリーミッションすべて完了で達成",
text = "デイリーミッションを達成しよう",
category = (int)MissionCategory.Daily,
};
var progressValue = gameData.dailyMissionAchievedIdArray.Length;

View File

@ -19,7 +19,7 @@ namespace MyGame.Scenes.Settings.Scripts
private void Start()
{
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
SoundManager.Instance.SaveVolumeBGM();
SoundManager.Instance.SaveVolumeSE();

View File

@ -99,16 +99,17 @@ public class Market : SingletonMonoBehaviour<Market>
// 購入リクエスト
var maxOrder = orderPosisionObject.transform.childCount;
orderSubject.Do(_ => { Debug.Log($"aa orderSubject");})
.Merge(waitCustomerList.ObserveAdd().AsUnitObservable().Do(_ => { Debug.Log($"aa waitCustomerListAdd");}))
.Merge(shopState.Where(x => x == ShopState.Open).AsUnitObservable().Do(_ => { Debug.Log($"aa shopStateOpen");}))
Observable.Merge(
orderSubject /*.Do(_ => { Debug.Log($"aa orderSubject");})*/,
waitCustomerList.ObserveAdd().AsUnitObservable() /*.Do(_ => { Debug.Log($"aa waitCustomerListAdd");})*/,
shopState.Where(x => x == ShopState.Open).AsUnitObservable() /*.Do(_ => { Debug.Log($"aa shopStateOpen");})*/
)
.BatchFrame()
.Where(_ => waitCustomerList.Count > 0)
.SelectMany(_ => waitCustomerList.ToList().GetRange(0, Mathf.Min(maxOrder, waitCustomerList.Count)))
.Subscribe(customer =>
{
var count = customerList.Count(x => x.State.Value == CustomerState.Order);
Debug.Log($"aa order:{count} Request {Time.time} {customer.GetHashCode()}");
if (count >= maxOrder)
{
// shopState.Value = ShopState.Busy;
@ -171,8 +172,17 @@ public class Market : SingletonMonoBehaviour<Market>
}
catch (Exception e)
{
Debug.LogError($"d:{displayFlavors.Count}, {string.Join("", tmpOrders)}");
throw;
Debug.LogError($"d:{displayFlavors.Count}, {string.Join("", tmpOrders)}" +
$"\nshuffled:{shuffledOrder.Count}, maxNum:{shuffledOrder.Max()}");
/*
*
* orderを引いたのでそのまま処理せず逃がす
*/
controller.CallWaitForSeconds(1.5f, () =>
{
controller.ChangeCustomerState(CustomerState.Leave);
});
dontBuyCustomerList.Add(controller);
}
}
foreach (var customerController in dontBuyCustomerList)
@ -470,9 +480,26 @@ public class Market : SingletonMonoBehaviour<Market>
}
// 補充候補リスト
var orders = Enumerable.Range(0, shopStock.Count).Except(shuffledOrder).ToList();
var refillList = orders.OrderBy(_ => Random.value).ToList();
var refillList = orders.GetRange(0, refillCount).OrderBy(_ => Random.value).ToList();
shuffledOrder.AddRange(refillList);
try
{
if (displayFlavors.Count <= shopStock.Count)
{
displayFlavors = shopStock.ToList();
}
else
{
for (int i = 0; i < refillList.Count; i++)
{
displayFlavors[refillList[i]] = shopStock[shopStock.Count - 1 - i];
}
}
}
catch (Exception e)
{
throw;
}
return refillList;
}

View File

@ -83,7 +83,23 @@ public class MarketManager : MonoBehaviour
productDataList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);
stockView.SetStock(gameData.StorageTanks);
var startStocks = market.ShuffledOrder.Select(x => (x, market.DisplayFlavors[x])).ToList();
List<(int, ProductStockData)> startStocks;
try
{
startStocks = market.ShuffledOrder.Select(x => (x, market.DisplayFlavors[x])).ToList();
}
catch (Exception e)
{
#if UNITY_EDITOR
Debug.LogError($"{market.ShuffledOrder.Count}, {market.DisplayFlavors.Count}");
#endif
/*
*
*/
startStocks = market.ShuffledOrder
.Where(x => x < market.DisplayFlavors.Count)
.Select(x => (x, market.DisplayFlavors[x])).ToList();
}
cartView.Initialize();
cartView.SetStock(startStocks, false);
BrotherPinkView.Instance.SetBrotherView(pinkTarget);

View File

@ -24,7 +24,7 @@ public class ShopLevelUp : MonoBehaviour
var shopLevel = LocalCacheManager.Load<int>(DataTag);
var scriptList = SpreadsheetDataManager.Instance.GetBaseDataList<BrotherScriptData>(Const.ScriptDataSheet);
var targetScriptList = scriptList.Where(data => data.id == shopLevel).ToList();
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -26,7 +26,7 @@ public class TankDetailView : MonoBehaviour
private void Start()
{
var data = LocalCacheManager.Load<(int tankNum, int totalStock, StorageTank tankData, ProductData productData, List<(ProductRarity rarity, int price, int stock)> raritySummaryData)>(TankDetailDataTag);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -25,7 +25,7 @@ public class TastingView : MonoBehaviour
packageImageTarget.DestroyAllChildrens();
Instantiate(x.productData.GetIconPrefab(), packageImageTarget);
}).AddTo(this);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.5f, () =>
@ -34,7 +34,7 @@ public class TastingView : MonoBehaviour
TransitionManager.Instance.UnloadScene(GameScenes.Tasting);
});
}).AddTo(this);
tastingButton.OnClickAsObservable().Subscribe(_ =>
tastingButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.5f, () =>

View File

@ -1064,6 +1064,7 @@ GameObject:
- component: {fileID: 658354829}
- component: {fileID: 658354828}
- component: {fileID: 658354831}
- component: {fileID: 658354832}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@ -1110,7 +1111,7 @@ Camera:
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Bits: 23
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
@ -1152,6 +1153,18 @@ MonoBehaviour:
serializedVersion: 2
m_Bits: 4294967295
m_MaxRayIntersections: 0
--- !u!114 &658354832
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 658354827}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c11194ed6fd84a1f812fa2cfae75f873, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &658817260
GameObject:
m_ObjectHideFlags: 0
@ -1636,7 +1649,7 @@ PrefabInstance:
- target: {fileID: 4293843006989820480, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
value: 400
objectReference: {fileID: 0}
- target: {fileID: 4293843006989820480, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
@ -1736,7 +1749,7 @@ PrefabInstance:
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_SizeDelta.y
value: -653.7666
value: -1063.2974
objectReference: {fileID: 0}
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
@ -1746,7 +1759,7 @@ PrefabInstance:
- target: {fileID: 4293843007976718249, guid: 1c993e9707f1a4fada56020be27dde28,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 58.699707
value: 58.69995
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1c993e9707f1a4fada56020be27dde28, type: 3}

View File

@ -65,7 +65,7 @@ public class RecipeDetailView : MonoBehaviour
}
}
cancelButton.OnClickAsObservable().Subscribe(_ =>
cancelButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
@ -76,7 +76,7 @@ public class RecipeDetailView : MonoBehaviour
});
}).AddTo(this);
nextButton.OnClickAsObservable().Subscribe(_ =>
nextButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
LocalCacheManager.Save(PopcornGameManager.PanDataTag, panSelector.SelectedPanData.Value);
// 消費

View File

@ -21,7 +21,7 @@ public class RecipeSelectDialog : MonoBehaviour
void Start()
{
var gameData = GameDataManager.GameData;
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
@ -56,7 +56,7 @@ public class RecipeSelectDialog : MonoBehaviour
if (hasRecipe)
{
view.SetLockPanel(false);
view.RecipeClickObservable.Subscribe(_ =>
view.RecipeClickObservable.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(PopcornGameManager.CookingDataTag, productData);
RecipeDetailView.ShowDialog(() =>

View File

@ -133,6 +133,16 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y
value: 50
objectReference: {fileID: 0}
- target: {fileID: 9133304335268316946, guid: 3ea48dc60c16147799619e2fb9fe1cd9,
type: 3}
propertyPath: m_Transition
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9133304335268316946, guid: 3ea48dc60c16147799619e2fb9fe1cd9,
type: 3}
propertyPath: m_Interactable
value: 1
objectReference: {fileID: 0}
- target: {fileID: 9133304335334808081, guid: 3ea48dc60c16147799619e2fb9fe1cd9,
type: 3}
propertyPath: m_AnchoredPosition.x

View File

@ -19,7 +19,7 @@ public class ShopItemDetailView : MonoBehaviour
{
var data = LocalCacheManager.Load<ShopData>(ItemDetailTag);
SetData(data);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -43,7 +43,7 @@ public class ShopItemPurchaseView : MonoBehaviour
var data = LocalCacheManager.Load<(ShopData shopData, int stockCount)>(ItemPurchaseTag);
LocalCacheManager.Remove(ItemPurchaseTag);
SetData(data.shopData, data.stockCount);
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
LocalCacheManager.Load<Action>(CloseCallbackTag, null)?.Invoke();
transform.SetLocalScale(0);
@ -53,8 +53,9 @@ public class ShopItemPurchaseView : MonoBehaviour
TransitionManager.Instance.UnloadScene(GameScenes.Purchase);
});
}).AddTo(this);
purchaseOnButton.OnClickAsObservable().Subscribe(_ =>
purchaseOnButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
purchaseOnButton.interactable = false;
LocalCacheManager.Load<Action<int>>(PurchaseCallbackTag, null)?.Invoke(currentCount.Value);
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -57,6 +57,7 @@ public class Shopping : MonoBehaviour
}).AddTo(itemView);
// アイテム購入クリック購読
itemView.PurchaseButtonObservable
.ThrottleFirst(TimeSpan.FromSeconds(.3f))
.Where(_ => shopData.price <= CoinManager.Instance.OwnCoin)
.Subscribe(_ =>
{
@ -77,7 +78,7 @@ public class Shopping : MonoBehaviour
});
}).AddTo(itemView);
// show detail view
itemView.DetailButtonObservable.Subscribe(_ =>
itemView.DetailButtonObservable.ThrottleFirst(TimeSpan.FromSeconds(.3f)).Subscribe(_ =>
{
LocalCacheManager.Save(ShopItemDetailView.ItemDetailTag, shopData);
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ShoppingExplanation);

View File

@ -16,6 +16,7 @@ public sealed class ApplicationExitConfirmDialogManager : MonoBehaviour
{
backButton.OnClickAsObservable()
.Merge(closeButton.OnClickAsObservable())
.Take(1)
.Subscribe(_ =>
{
transform.parent.SetLocalScale(0);

View File

@ -33,6 +33,9 @@ namespace MyGame.Scripts
case GameScenes.Main:
camera.orthographicSize = 14f;
break;
case GameScenes.marketing:
camera.orthographicSize = 13.5f;
break;
}
}
}

View File

@ -7,51 +7,57 @@ using UnityEngine;
public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
{
[SerializeField] private FloatReactiveProperty checkInterval = new FloatReactiveProperty(.1f);
private IObservable<int> heartObserver;
public IObservable<int> Heart => heartObserver;
private readonly Subject<int> heartObserver = new Subject<int>();
private readonly Subject<int> sceneCounter = new Subject<int>();
private readonly Subject<int> shopLevelObserver = new Subject<int>();
private readonly Subject<int> achievedMissionObserver = new Subject<int>();
private readonly Subject<int> addCoinObserver = new Subject<int>();
private readonly Subject<int> subCoinObserver = new Subject<int>();
private readonly Subject<int> addCornObserver = new Subject<int>();
private readonly Subject<int> addCustomerObserver = new Subject<int>();
private readonly Subject<int> addSalesObserver = new Subject<int>();
private readonly Subject<int> addRareSalesObserver = new Subject<int>();
private readonly Subject<int> hasRecipeObserver = new Subject<int>();
private readonly Subject<int> deliveredBulkOrderObserver = new Subject<int>();
private readonly BoolReactiveProperty updateMissionAchieved = new BoolReactiveProperty();
public IReadOnlyReactiveProperty<bool> UpdateMissionAchieved => updateMissionAchieved;
private IObservable<int> sceneCounter;
public IObservable<int> SceneCounter => sceneCounter;
public IObservable<bool> ShopLevelUpdate;
public IObservable<bool> ShopLevelUpdate { get; private set; }
private void Start()
{
checkInterval.AddTo(this);
updateMissionAchieved.AddTo(this);
var levelList = SpreadsheetDataManager.Instance.GetBaseDataList<ShopLevelData>(Const.ShopLevelDataSheet);
heartObserver = checkInterval
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => GameDataManager.GameData.Heart)
.DistinctUntilChanged())
.Switch();
var shopLevelObserver = checkInterval
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => GameDataManager.GameData.ViewedShopLevel)
.DistinctUntilChanged())
.Switch();
sceneCounter = checkInterval
.Select(x =>
Observable.Interval(TimeSpan.FromSeconds(x))
.Select(_ => UnityEngine.SceneManagement.SceneManager.sceneCount)
.DistinctUntilChanged()
.Delay(TimeSpan.FromSeconds(.4f))
// .Do(c => { Debug.Log($"sceneCount:{c}");})
)
.Switch();
ShopLevelUpdate = Observable.CombineLatest(heartObserver, shopLevelObserver, sceneCounter,
(heart, level, sceneCount) =>
checkInterval.Select(x => Observable.Interval(TimeSpan.FromSeconds(x))).Switch().Subscribe(_ =>
{
if (level == 0 && GameDataManager.GameData.isFirstPlay)
var gameData = GameDataManager.GameData;
heartObserver.OnNext(gameData.Heart);
sceneCounter.OnNext(UnityEngine.SceneManagement.SceneManager.sceneCount);
shopLevelObserver.OnNext(gameData.ViewedShopLevel);
achievedMissionObserver.OnNext(gameData.AchievedMission.Count);
// addCoinObserver.OnNext(gameData.TotalAddCoin);
subCoinObserver.OnNext(gameData.TotalSubCoin);
addCornObserver.OnNext(gameData.TotalAddCornSeed);
addCustomerObserver.OnNext(gameData.TotalCustomerCount);
addSalesObserver.OnNext(gameData.TotalSales);
addRareSalesObserver.OnNext(gameData.RareTotalSales);
hasRecipeObserver.OnNext(gameData.MyRecipes.Length);
deliveredBulkOrderObserver.OnNext(gameData.BulkOrderDeliveredCount);
}).AddTo(this);
ShopLevelUpdate = Observable.CombineLatest(
heartObserver.DistinctUntilChanged(),
sceneCounter.DistinctUntilChanged().Delay(TimeSpan.FromSeconds(.4f)),
(heart, sceneCount) =>
{
var viewedLevel = GameDataManager.GameData.ViewedShopLevel;
if (viewedLevel == 0 && GameDataManager.GameData.isFirstPlay)
{
return false;
}
var currentLevel = levelList.LastOrDefault(data => data.heart <= heart)?.shopLevel ?? 1;
return currentLevel > level && sceneCount == 1;
return currentLevel > viewedLevel && sceneCount == 1;
})
.DistinctUntilChanged()
.Publish(false)
@ -59,6 +65,85 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
#if UNITY_EDITOR
// ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); });
#endif
// ミッション達成チェッカー
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
var normalMissionList = missionList.Where(data => data.Category == MissionCategory.Normal).ToList();
var latestMissionList = GetLatestMissionList();
// 各条件の最前の未達成のミッションのみにフィルタ
List<MissionData> GetLatestMissionList() => normalMissionList
.Where(data => data.shopLevel <= GameDataManager.GameData.ViewedShopLevel)
.Where(data => !GameDataManager.GameData.AchievedMission.Contains(data.id))
.GroupBy(data => data.Condition, (_, list) => list.FirstOrDefault()).ToList();
// 店舗レベルアップorミッション達成でリスト更新して達成チェック
Observable.Merge(
shopLevelObserver.DistinctUntilChanged(),
achievedMissionObserver.DistinctUntilChanged())
.Subscribe(_ =>
{
latestMissionList = GetLatestMissionList();
// ここで達成を再確認
updateMissionAchieved.Value = latestMissionList
.Any(data => data.count <= MissionManager.GetProgressValue(data));
// CheckDailyCompleteMission
if (!GameDataManager.GameData.dailyMissionCompleted)
{
if (GameDataManager.GameData.dailyMissionIdArray.Length <= GameDataManager.GameData.dailyMissionAchievedIdArray.Length)
{
updateMissionAchieved.Value = true;
}
}
});
// 各種ポップコーン以外の達成を確認
Observable.Merge(
subCoinObserver.DistinctUntilChanged().Select(_ => MissionCondition.CoinConsumeCount),
addCornObserver.DistinctUntilChanged().Select(_ => MissionCondition.CornCount),
addCustomerObserver.DistinctUntilChanged().Select(_ => MissionCondition.CustomerCount),
hasRecipeObserver.DistinctUntilChanged().Select(_ => MissionCondition.RecipeCount),
deliveredBulkOrderObserver.DistinctUntilChanged().Select(_ => MissionCondition.BulkOrderDeliveredCount))
.Subscribe(condition =>
{
if (latestMissionList
.Where(data => data.Condition == condition)
.Any(data => data.count <= MissionManager.GetProgressValue(data)))
{
updateMissionAchieved.Value = true;
}
// dailyMission
var ids = GameDataManager.GameData.dailyMissionIdArray.Except(GameDataManager.GameData.dailyMissionAchievedIdArray);
if (missionList
.Where(data => ids.Contains(data.id))
.Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData)))
{
updateMissionAchieved.Value = true;
}
});
// ポップコーン達成確認
Observable.Merge(
addSalesObserver.DistinctUntilChanged(),
addRareSalesObserver.DistinctUntilChanged())
.Subscribe(_ =>
{
if (latestMissionList
.Any(data => data.count <= MissionManager.GetProgressValue(data)))
{
updateMissionAchieved.Value = true;
}
// dailyMission
var ids = GameDataManager.GameData.dailyMissionIdArray.Except(GameDataManager.GameData.dailyMissionAchievedIdArray);
if (missionList
.Where(data => ids.Contains(data.id))
.Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData)))
{
updateMissionAchieved.Value = true;
}
});
// デイリーミッション日付チェック
sceneCounter
.Where(x => x <= 1)
@ -93,7 +178,6 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
gameData.dailyMissionCompleted = false;
gameData.ResetDailyTotalCount();
// 新ミッション登録
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
var targetList = missionList.Where(data =>
data.Category == MissionCategory.Daily && data.shopLevel <= gameData.ViewedShopLevel);
gameData.dailyMissionIdArray = targetList.ToList().RandomChoose(3).Select(data => data.id).ToArray();

View File

@ -21,43 +21,16 @@ public class HeaderManager : MonoBehaviour
});
missionButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
{
MissionManager.ShowDialog(onAchieved:() => missionIndicator.SetActive(CheckMissionIndicate()));
MissionManager.ShowDialog();
});
informationButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
{
TransitionManager.Instance.LoadSceneAdditive(GameScenes.Information);
});
// mission報酬通知
missionIndicator.SetActive(CheckMissionIndicate());
}
private bool CheckMissionIndicate()
GameDataObserver.Instance.UpdateMissionAchieved.Subscribe(x =>
{
// ミッション読み込み
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
var gameData = GameDataManager.GameData;
// ミッション表示
if (missionList
.Where(data => data.Category == MissionCategory.Normal && data.shopLevel <= gameData.ViewedShopLevel)
.Where(missionData => !GameDataManager.GameData.AchievedMission.Contains(missionData.id))
.Any(missionData => missionData.count <= MissionManager.GetProgressValue(missionData)))
{
return true;
}
// dailyMission
// コンプリートミッション
if (!gameData.dailyMissionCompleted)
{
if (gameData.dailyMissionIdArray.Length <= gameData.dailyMissionAchievedIdArray.Length)
{
return true;
}
}
var ids = gameData.dailyMissionIdArray.Except(gameData.dailyMissionAchievedIdArray);
return missionList
.Where(data => ids.Contains(data.id))
.Any(missionData => missionData.count <= MissionManager.GetDailyProgressValue(missionData));
missionIndicator.SetActive(x);
}).AddTo(this);
}
}

View File

@ -15,7 +15,7 @@ namespace MyGame.Scripts
private void Start()
{
closeButton.OnClickAsObservable().Subscribe(_ =>
closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);

View File

@ -0,0 +1,13 @@
{
"MonoBehaviour": {
"Version": 3,
"EnableBurstCompilation": true,
"EnableOptimisations": true,
"EnableSafetyChecks": false,
"EnableDebugInAllBuilds": false,
"CpuMinTargetX32": 0,
"CpuMaxTargetX32": 0,
"CpuMinTargetX64": 0,
"CpuMaxTargetX64": 0
}
}