獲得処理追加

This commit is contained in:
kimura 2021-10-08 18:43:06 +09:00
parent 20079e7fab
commit 0895a13e15
5 changed files with 149 additions and 12 deletions

View File

@ -103,6 +103,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 2377818822852436376}
- component: {fileID: 7948284479330041018}
m_Layer: 5
m_Name: Window
m_TagString: Untagged
@ -132,6 +133,24 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 145}
m_SizeDelta: {x: 900, y: 1020}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &7948284479330041018
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2377818822852436379}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 97711eafafff465ebe1223e7ed0ab2e7, type: 3}
m_Name:
m_EditorClassIdentifier:
backgroundAnimator: {fileID: 2377818822785157575}
closeButton: {fileID: 2377818823238410848}
heartText: {fileID: 2377818823370329765}
coinText: {fileID: 2377818823929203721}
bonusCoinText: {fileID: 2377818823802633425}
messageText: {fileID: 2377818823780007094}
--- !u!1 &2377818823009469882
GameObject:
m_ObjectHideFlags: 0

View File

@ -1,18 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class BulkOrderProgressData
public class BulkOrderResultData
{
public int orderId;
public ProductRarity rarity;
public int Number;
public ProductRarity Rarity;
}
public class BulkOrder : MonoBehaviour
{
public static readonly string DataTag = "BulkOrderData";
public static readonly string CancelCallbackTag = "BulkOrderCancelCallback";
public static readonly string AchievedCallbackTag = "BulkOrderAchievedCallback";
private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger");
private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger");
[SerializeField] private Animator backgroundAnimator;
@ -49,7 +51,7 @@ public class BulkOrder : MonoBehaviour
messageText.text = messageList.First(data => data.id == gameData.OrderTextId).requestText;
coinText.text = bulkOrderData.rewardCoin.ToString();
heartText.text = bulkOrderData.rewardHeart.ToString();
// cache
LocalCacheManager.Save(DataTag, bulkOrderData);
cancelButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
{
@ -59,7 +61,7 @@ public class BulkOrder : MonoBehaviour
gameData.CancelOrderId = gameData.OrderIdInProgress;
// カウントリセット
gameData.OrderConditionCount = 0;
GameDataManager.SaveGameData();
// キャンセルと同時に閉じる
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
@ -71,19 +73,68 @@ public class BulkOrder : MonoBehaviour
TransitionManager.Instance.LoadSceneAdditive(GameScenes.BulkOrderCancel);
}).AddTo(this);
// 納品チェック
var orderList = new List<int>
{
bulkOrderData.productId1,
bulkOrderData.productId2,
bulkOrderData.productId3,
};
// 納品する
var achieved = gameData.CompletedOrderList.Count == orderList.Count(x => x != 0);
achievedObject.SetActive(achieved);
deliveredButton.interactable = achieved;
deliveredButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
{
// カウントリセット
gameData.OrderConditionCount = 0;
LocalCacheManager.Save(AchievedCallbackTag, new Action(() =>
{
// 獲得
var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList<RarityData>(Const.RarityDataSheet);
var bonus = CalcBonus(rarityList, gameData.CompletedOrderList, bulkOrderData.shopLevel);
gameData.Coin = CoinManager.Instance.OwnCoin;
CoinManager.Instance.AddCoinWithEffect(bulkOrderData.rewardCoin + bonus);
gameData.Heart += bulkOrderData.rewardHeart;
HeartMeter.Instance.AddHeart(bulkOrderData.rewardHeart);
// カウントリセット
gameData.OrderConditionCount = 0;
gameData.CurrentLevelOrderCount++;
#if UNITY_EDITOR
Debug.Log($"current:{gameData.CurrentLevelOrderCount} max:{bulkOrderData.maxOrder}");
#endif
// オーダー上限を超えるとそのLevelでの注文終了
if (gameData.CurrentLevelOrderCount == bulkOrderData.maxOrder)
{
gameData.CurrentLevelOrderCount = 0;
gameData.AchievedOrderLevel = bulkOrderData.shopLevel;
}
GameDataManager.SaveGameData();
// キャンセルと同時に閉じる
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder);
});
}));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.BulkOrderAchievement);
}).AddTo(this);
var productList = SpreadsheetDataManager.Instance.GetBaseDataList<ProductData>(Const.ProductDataSheet);
if (productList.FirstOrDefault(data => data.id == bulkOrderData.productId1) is ProductData data1)
{
itemView1.SetData(data1, bulkOrderData.count1);
itemView1.SetButtonActive(itemView1.CheckAmount(data1));
if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 1) is BulkOrderResultData resultData)
{
itemView1.SetCooked(resultData.Rarity);
}
itemView1.gameObject.SetActive(true);
itemView1.CookingButton.ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
{
gameData.CompletedOrderList.Add(new BulkOrderResultData(){Number = 1, Rarity = ProductRarity.Copper});
}).AddTo(itemView1);
}
else
{
@ -93,6 +144,10 @@ public class BulkOrder : MonoBehaviour
{
itemView2.SetData(data2, bulkOrderData.count2);
itemView2.SetButtonActive(itemView2.CheckAmount(data2));
if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 2) is BulkOrderResultData resultData)
{
itemView2.SetCooked(resultData.Rarity);
}
itemView2.gameObject.SetActive(true);
}
else
@ -103,6 +158,10 @@ public class BulkOrder : MonoBehaviour
{
itemView3.SetData(data3, bulkOrderData.count3);
itemView3.SetButtonActive(itemView3.CheckAmount(data3));
if (gameData.CompletedOrderList.FirstOrDefault(data => data.Number == 3) is BulkOrderResultData resultData)
{
itemView3.SetCooked(resultData.Rarity);
}
itemView3.gameObject.SetActive(true);
}
else
@ -110,4 +169,20 @@ public class BulkOrder : MonoBehaviour
itemView3.gameObject.SetActive(false);
}
}
public static int CalcBonus(List<RarityData> rarityList, List<BulkOrderResultData> resultData, int shopLevel)
{
var totalBonus = 0;
var hasRarityList = resultData.Where(data => data.Rarity != ProductRarity.Normal).ToList();
if (hasRarityList.Count == 0)
{
return 0;
}
foreach (var progressData in hasRarityList)
{
var bonusRate = rarityList.FirstOrDefault(data => data.Rarity == progressData.Rarity)?.bulkOrderBonus ?? 0;
totalBonus += bonusRate * shopLevel;
}
return Mathf.CeilToInt((float) totalBonus / hasRarityList.Count);
}
}

View File

@ -1,6 +1,47 @@
using System;
using System.Linq;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class BulkOrderAchievedView : MonoBehaviour
{
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 Text heartText;
[SerializeField] private Text coinText;
[SerializeField] private Text bonusCoinText;
[SerializeField] private Text messageText;
private void Start()
{
if (LocalCacheManager.Load<BulkOrderData>(BulkOrder.DataTag, null) is BulkOrderData orderData)
{
var gameData = GameDataManager.GameData;
var messageList = SpreadsheetDataManager.Instance.GetBaseDataList<BulkOrderTextData>(Const.BulkOrderTextDataSheet);
var rarityList = SpreadsheetDataManager.Instance.GetBaseDataList<RarityData>(Const.RarityDataSheet);
var bonus = BulkOrder.CalcBonus(rarityList, gameData.CompletedOrderList, orderData.shopLevel);
heartText.text = orderData.rewardHeart.ToString();
coinText.text = orderData.rewardCoin.ToString();
bonusCoinText.text = bonus.ToString();
messageText.text = messageList.First(data => data.id == gameData.OrderTextId).thanksText;
}
closeButton.OnClickAsObservable().Subscribe(_ =>
{
if (LocalCacheManager.Load<Action>(BulkOrder.AchievedCallbackTag, null) is Action callback)
{
callback.Invoke();
}
transform.parent.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
TransitionManager.Instance.UnloadScene(GameScenes.BulkOrderAchievement);
TransitionManager.Instance.UnloadScene(GameScenes.BulkOrder);
});
}).AddTo(this);
}
}

View File

@ -62,6 +62,7 @@ public class KitchenManager : MonoBehaviour
orderIndicatorView.TappedPhone.ThrottleFirst(TimeSpan.FromSeconds(1f)).Take(1).Subscribe(_ =>
{
// タップで更新
gameData.CompletedOrderList.Clear();
gameData.OrderIdInProgress = result.nextOrderId;
if (nextMessageList.Exists(data => data.id == gameData.OrderTextId))
{

View File

@ -102,9 +102,9 @@ public sealed class GameData {
// [DataMember(Name = "Data27")]
// BulkOrder
[DataMember(Name = "Data28")]
public int OrderIdInProgress;
[DataMember(Name = "Data29")]
public int OrderTextId;
[DataMember(Name = "Data30")]
@ -113,9 +113,10 @@ public sealed class GameData {
public int CancelOrderId;
[DataMember(Name = "Data32")]
public int AchievedOrderLevel;
// 進捗
[DataMember(Name = "Data33")]
public List<BulkOrderProgressData> OrderProgressList;
public List<BulkOrderResultData> CompletedOrderList;
[DataMember(Name = "Data34")]
public int CurrentLevelOrderCount;
// mission
[DataMember(Name = "Data1001")]
@ -234,7 +235,7 @@ public sealed class GameData {
Pans = Pans ?? new int[0];
TotalSalesList = TotalSalesList ?? new List<ProductStockData>();
AchievedMission = achievedMission?.ToList() ?? new List<int>();
OrderProgressList = OrderProgressList ?? new List<BulkOrderProgressData>();
CompletedOrderList = CompletedOrderList ?? new List<BulkOrderResultData>();
}
private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){
var dictionary = new Dictionary<int, int>();