diff --git a/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt b/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt new file mode 100644 index 00000000..f0dae863 --- /dev/null +++ b/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt @@ -0,0 +1 @@ +tH3z3Et10Knf4DgmAzuyNeZ7dYAsZVGGIxyUvbKPolUDqZJeexF/XwPpsBiPbouNvG39NB9EZOmGMlUZ1m980sZTu9k8bIFfmKQlHcJLjTdpITS5YMOfyUNNM/HIO9Nf \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt.meta b/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt.meta new file mode 100644 index 00000000..b145ff94 --- /dev/null +++ b/popcorn/Assets/MyGame/Resources/Data/ItemConditionData.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 421e6ff37efa34561b5988b4609d80d6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/EarningsReportDialog.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/EarningsReportDialog.cs index c37874c3..b4b517a6 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/EarningsReportDialog.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/EarningsReportDialog.cs @@ -35,8 +35,9 @@ namespace MyGame.Scenes.Main.Scripts var (coin, heart) = PartTimerManager.CalcEarnings(partTimerData, cityGameData.PartTimerElapsed); coinText.text = coin.ToString(); heartText.text = heart.ToString(); - shopCustomizeObject.SetActive(PartTimerManager.Instance.CheckEarningsCustomizeCoin(true)); - shopCustomizeCoinText.text = "1"; + var customizeCoin = PartTimerManager.Instance.CheckEarningsCustomizeCoin(); + shopCustomizeObject.SetActive(customizeCoin > 0); + shopCustomizeCoinText.text = customizeCoin.ToString(); closeButton.OnClickAsObservable().Take(1).Subscribe(_ => { diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs index 078ba885..a37906b3 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using MyGame.Scenes.Main.Scripts; using MyGame.Scenes.marketing.Scripts; using MyGame.Scripts; using TMPro; @@ -26,9 +27,10 @@ public class MarketManager : MonoBehaviour [SerializeField] private Transform coinPrefab; [SerializeField] private Transform rootTransform; [SerializeField] private TutorialObjectMask walkerMask; + [SerializeField] private GameObject dollarBag; private Market market; List productDataList; - private bool isPartTimer; + private bool isPartTimerMode; private readonly Subject customerRewardTimerUpdateSubject = new Subject(); private readonly Subject vipTimerUpdateSubject = new Subject(); @@ -41,7 +43,7 @@ public class MarketManager : MonoBehaviour vipTimerUpdateSubject.AddTo(this); market = WorldMarketManager.Instance.GetCurrentCityMarket(); market.CheckPartTimerMode(); - isPartTimer = market.IsPartTimer; + isPartTimerMode = market.IsPartTimer; SoundManager.Instance.PlayBGM("bgm_marketing"); var globalGameData = GameDataManager.GameData; @@ -63,12 +65,36 @@ public class MarketManager : MonoBehaviour // 最新の都市ではない場合、バイトが有効 if (!market.IsLatestCity) { - partTimerView.StartAnimation(isPartTimer); + partTimerView.StartAnimation(isPartTimerMode); } - if (isPartTimer) + dollarBag.SetActive(isPartTimerMode && cityGameData.PartTimerElapsed > 10); + if (isPartTimerMode) { rewardButtonView.gameObject.SetActive(false); vipCustomerButtonView.gameObject.SetActive(false); + + var partTimersData = SpreadsheetDataManager.Instance.GetBaseDataList(Const.PartTimerDataSheet); + dollarBag.AddComponent().OnPointerClickAsObservable().Take(1).Subscribe(_ => + { + dollarBag.SetActive(false); + // dialog表示時点の値をcache + var partTimerElapsed = cityGameData.PartTimerElapsed; + EarningsReportDialog.ShowDialog((coinPos, heartPos) => + { + var partTimerData = partTimersData.First(data => data.level == cityGameData.PartTimerLevel); + var (coin, heart) = PartTimerManager.CalcEarnings(partTimerData, partTimerElapsed); + cityGameData.WaitAddHeart += heart; + HeartMeter.Instance.AddHeartForBulkOrder(heartPos, () => + { + cityGameData.MoveHeart(heart); + }); + CoinManager.Instance.AddCoinForBulkOrder(coin, coinPos); + cityGameData.Coin = CoinManager.Instance.OwnCoin; + cityGameData.PartTimerElapsed -= partTimerElapsed; + globalGameData.ShopCustomizeCoin += PartTimerManager.Instance.GetCustomizeCoin(); + GameDataManager.SaveGameData(); + }); + }).AddTo(this); } if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) @@ -157,8 +183,8 @@ public class MarketManager : MonoBehaviour { vipCustomerButtonView.SetActive(isPause); // バイト君モードでは兄弟非表示 - blueView.SetActive(!isPartTimer && !isPause); - BrotherPinkView.Instance.SetActive(!isPartTimer && !isPause); + blueView.SetActive(!isPartTimerMode && !isPause); + BrotherPinkView.Instance.SetActive(!isPartTimerMode && !isPause); // 最新の都市ではない場合バイト非表示 partTimerView.SetActive(!market.IsLatestCity && !isPause); }).AddTo(this); @@ -313,7 +339,7 @@ displayFlavors: {market.DisplayFlavors.Aggregate("", (s, data) => $"{s},{data.Fl .Subscribe(x => { var (isClose, isPromotion) = x; - if (isClose || isPartTimer) + if (isClose || isPartTimerMode) { BrotherPinkView.Instance.StopTasting(); rewardButtonView.gameObject.SetActive(false); @@ -491,7 +517,7 @@ displayFlavors: {market.DisplayFlavors.Aggregate("", (s, data) => $"{s},{data.Fl }).AddTo(customerAnimator); var eventTrigger = customerAnimator.gameObject.AddComponent(); eventTrigger.OnPointerClickAsObservable() - .Where(_ => !isPartTimer) + .Where(_ => !isPartTimerMode) .Take(1) .Subscribe(_ => { diff --git a/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity b/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity index 9dab5430..b3bd5e6e 100644 --- a/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity +++ b/popcorn/Assets/MyGame/Scenes/marketing/marketing.unity @@ -3473,6 +3473,7 @@ MonoBehaviour: type: 3} rootTransform: {fileID: 714437465} walkerMask: {fileID: 237651842} + dollarBag: {fileID: 1217099569} --- !u!1 &1026166058 GameObject: m_ObjectHideFlags: 0 @@ -4171,6 +4172,8 @@ GameObject: m_Component: - component: {fileID: 1217099570} - component: {fileID: 1217099571} + - component: {fileID: 1217099573} + - component: {fileID: 1217099572} m_Layer: 5 m_Name: DollarBag m_TagString: Untagged @@ -4201,8 +4204,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 128, y: -321} - m_SizeDelta: {x: 0, y: 0} + m_AnchoredPosition: {x: 78, y: -271} + m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0, y: 1} --- !u!95 &1217099571 Animator: @@ -4224,6 +4227,30 @@ Animator: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1217099572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217099569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ee012d4774ae943b49c2443232200135, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1217099573 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217099569} + m_CullTransparentMesh: 1 --- !u!1 &1235629312 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scripts/Const.cs b/popcorn/Assets/MyGame/Scripts/Const.cs index f3c2634b..16c3a746 100644 --- a/popcorn/Assets/MyGame/Scripts/Const.cs +++ b/popcorn/Assets/MyGame/Scripts/Const.cs @@ -74,6 +74,9 @@ public static class Const { public static readonly string CityDataSheet = "CityData"; public static readonly string FundingDataSheet = "FundingData"; public static readonly string PartTimerDataSheet = "PartTimerData"; + public static readonly string CityShopLevelDataSheet = "CityShopLevelData"; + public static readonly string ItemConditionDataSheet = "ItemConditionData"; + public static readonly string ScriptConditionDataSheet = "ScriptConditionData"; // language public static readonly string LangJapanDataSheet = "LangJapanData"; @@ -118,6 +121,9 @@ public static class Const { new SheetData(Const.CityDataSheet), new SheetData(Const.FundingDataSheet), new SheetData(Const.PartTimerDataSheet), + new SheetData(Const.CityShopLevelDataSheet), + new SheetData(Const.ItemConditionDataSheet), + new SheetData(Const.ScriptConditionDataSheet), }; public static readonly SheetData[] LanguageSheetNameList = new SheetData[]{ new SheetData(Const.LangJapanDataSheet, "LanguageData"), diff --git a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs index 232eff4b..f7b58710 100644 --- a/popcorn/Assets/MyGame/Scripts/GameDataManager.cs +++ b/popcorn/Assets/MyGame/Scripts/GameDataManager.cs @@ -200,7 +200,9 @@ public sealed class GameData { // バイト君 public int PartTimerLevel; public int PartTimerElapsed; // ゲーム起動中経過時間 - public int CustomizeCoinElapsed; // 羽の獲得用経過時間 + + private int[] usedItemCondition; + public List UsedItemCondition; // mission [DataMember(Name = "Data1001")] @@ -571,6 +573,7 @@ public sealed class GameData { ScrollGameStageScoreList = ScrollGameStageScoreList ?? new List(); CityGameDataDict ??= new CityGameDataDict(); FundingDict ??= new FundingDict(); + UsedItemCondition = usedItemCondition?.ToList() ?? new List(); } private Dictionary ArrayToDictionary(KeyValueOfintint[] array){ var dictionary = new Dictionary(); @@ -587,6 +590,7 @@ public sealed class GameData { // lastAdRewardTimeArray = lastAdRewardTimeList.ToArray(); achievedMission = AchievedMission.ToArray(); deliveredOrder = DeliveredOrder.ToArray(); + usedItemCondition = UsedItemCondition.ToArray(); // CityGameData foreach (var cityGameData in CityGameDataDict.Values) { diff --git a/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs new file mode 100644 index 00000000..a6d6ec82 --- /dev/null +++ b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace MyGame.Scripts +{ + public class ItemConditionUtils + { + public static List GetList() + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ItemConditionDataSheet); + } + + public static List GetScriptList() + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ScriptConditionDataSheet); + } + + public static List GetList(int cityId) + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ItemConditionDataSheet) + .Where(data => data.cityId == cityId) + .ToList(); + } + + public static List GetList(int cityId, ItemCondition condition) + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ItemConditionDataSheet) + .Where(data => data.cityId == cityId) + .Where(data => data.Condition == condition) + .ToList(); + } + + public static List GetGlobalList(ItemCondition condition, int value) => GetList(0, condition, value); + public static List GetGlobalList(ItemCondition condition, int value, RewardActionType rewardActionType, bool ignoreUsed = false) => GetList(0, condition, value, rewardActionType, ignoreUsed); + public static List GetList(int cityId, ItemCondition condition, int value) + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ItemConditionDataSheet) + .Where(data => data.cityId == cityId) + .Where(data => data.Condition == condition) + .Where(data => data.needValue <= value) + .ToList(); + } + + public static List GetList(int cityId, ItemCondition condition, int value, RewardActionType rewardActionType, bool ignoreUsed = false) + { + var ignoreList = ignoreUsed ? GameDataManager.GameData.UsedItemCondition : new List(); + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ItemConditionDataSheet) + .Where(data => data.cityId == cityId) + .Where(data => data.Condition == condition) + .Where(data => data.needValue <= value) + .Where(data => data.RewardActionType == rewardActionType) + .Where(data => !ignoreList.Contains(data.id) ) + .ToList(); + } + + public static List GetScriptList(int cityId, ItemCondition condition) + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ScriptConditionDataSheet) + .Where(data => data.cityId == cityId) + .Where(data => data.Condition == condition) + .ToList(); + } + + public static List GetScriptList(int cityId, ItemCondition condition, int value) + { + return SpreadsheetDataManager.Instance.GetBaseDataList(Const.ScriptConditionDataSheet) + .Where(data => data.cityId == cityId) + .Where(data => data.Condition == condition) + .Where(data => data.needValue <= value) + .ToList(); + } + + public static void Use(ItemConditionData itemConditionData) + { + GameDataManager.GameData.UsedItemCondition.Add(itemConditionData.id); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs.meta b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs.meta new file mode 100644 index 00000000..42840d5c --- /dev/null +++ b/popcorn/Assets/MyGame/Scripts/ItemConditionUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6fa9bff677e4168bd7a82981de94ce4 +timeCreated: 1667534395 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scripts/PartTimerManager.cs b/popcorn/Assets/MyGame/Scripts/PartTimerManager.cs index d4150ea2..12f88cc5 100644 --- a/popcorn/Assets/MyGame/Scripts/PartTimerManager.cs +++ b/popcorn/Assets/MyGame/Scripts/PartTimerManager.cs @@ -12,9 +12,6 @@ namespace MyGame.Scripts { [SerializeField] private int updateTiming = 2; [SerializeField] private int saveTiming = 10; - [SerializeField] private int shopCustomizeCoinTiming = 86400; // 1day - [SerializeField] private int targetCount = 3; - private int checkCount; private float saveElapsed; private List partTimerList; private void Start() @@ -38,8 +35,6 @@ namespace MyGame.Scripts cityGameData.PartTimerElapsed += updateTiming; } - GameDataManager.GameData.CustomizeCoinElapsed += updateTiming; - saveElapsed += updateTiming; if (saveTiming < saveElapsed) { @@ -79,13 +74,15 @@ namespace MyGame.Scripts /// public int GetCustomizeCoin() { - if (CheckEarningsCustomizeCoin()) + // 達成リスト + var list = ItemConditionUtils.GetGlobalList(ItemCondition.TotalHeart, GameDataUtils.GetTotalHeart(), RewardActionType.CustomizeCoin, true); + var rewardCount = 0; + list.ForEach(data => { - checkCount = 0; - GameDataManager.GameData.CustomizeCoinElapsed -= shopCustomizeCoinTiming; - return 1; - } - return 0; + rewardCount += data.value; + ItemConditionUtils.Use(data); + }); + return rewardCount; } /// @@ -93,24 +90,7 @@ namespace MyGame.Scripts /// checkCountがTargetCount以上になれば受取可能 /// /// - public bool CheckEarningsCustomizeCoin(bool withCount = false) - { -#if UNITY_EDITOR - Debug.Log($"CustomizeCoinElapsed:{GameDataManager.GameData.CustomizeCoinElapsed}/{shopCustomizeCoinTiming} checkCount:{checkCount}/{targetCount}"); -#endif - if (shopCustomizeCoinTiming <= GameDataManager.GameData.CustomizeCoinElapsed) - { - if (withCount) - { - checkCount++; - } - if (targetCount <= checkCount) - { - return true; - } - } - return false; - } + public int CheckEarningsCustomizeCoin() => ItemConditionUtils.GetGlobalList(ItemCondition.TotalHeart, GameDataUtils.GetTotalHeart(), RewardActionType.CustomizeCoin, true).Sum(data => data.value); public static (int coin, int heart) CalcEarnings(PartTimerData partTimerData, int elapsed) { diff --git a/popcorn/Assets/MyGame/Scripts/SpreadsheetData.cs b/popcorn/Assets/MyGame/Scripts/SpreadsheetData.cs index 8fb1466c..df054ad7 100644 --- a/popcorn/Assets/MyGame/Scripts/SpreadsheetData.cs +++ b/popcorn/Assets/MyGame/Scripts/SpreadsheetData.cs @@ -181,6 +181,16 @@ public enum ScrollGameDifficulty Extra = 4 } +public enum ItemCondition +{ + TotalHeart = 1 +} + +public enum RewardActionType +{ + CustomizeCoin = 1 +} + [Serializable] public sealed class MissionData { @@ -677,4 +687,37 @@ public sealed class PartTimerData public int maxSales; public int maxHeart; public string prefabName; +} + +[Serializable] +public sealed class CityShopLevelData +{ + public int id; + public int cityId; + public int shopLevel; + public int heart; +} + +[Serializable] +public sealed class ItemConditionData +{ + public int id; + public int cityId; + public int condition; + public int needValue; + public int action; + public int value; + public ItemCondition Condition => (ItemCondition) condition; + public RewardActionType RewardActionType => (RewardActionType) action; +} + +[Serializable] +public sealed class ScriptConditionData +{ + public int id; + public int cityId; + public int condition; + public int needValue; + public int scriptId; + public ItemCondition Condition => (ItemCondition) condition; } \ No newline at end of file