Merge branch 'feature/1.7.0' of bitbucket.org:usaya/popcorn into feature/1.7.0
This commit is contained in:
commit
666699f7b6
|
@ -0,0 +1 @@
|
|||
tH3z3Et10Knf4DgmAzuyNeZ7dYAsZVGGIxyUvbKPolUDqZJeexF/XwPpsBiPbouNvG39NB9EZOmGMlUZ1m980sZTu9k8bIFfmKQlHcJLjTdpITS5YMOfyUNNM/HIO9Nf
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 421e6ff37efa34561b5988b4609d80d6
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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(_ =>
|
||||
{
|
||||
|
|
|
@ -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<ProductData> productDataList;
|
||||
private bool isPartTimer;
|
||||
private bool isPartTimerMode;
|
||||
|
||||
private readonly Subject<Unit> customerRewardTimerUpdateSubject = new Subject<Unit>();
|
||||
private readonly Subject<Unit> vipTimerUpdateSubject = new Subject<Unit>();
|
||||
|
@ -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<PartTimerData>(Const.PartTimerDataSheet);
|
||||
dollarBag.AddComponent<ObservableEventTrigger>().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<ObservableEventTrigger>();
|
||||
eventTrigger.OnPointerClickAsObservable()
|
||||
.Where(_ => !isPartTimer)
|
||||
.Where(_ => !isPartTimerMode)
|
||||
.Take(1)
|
||||
.Subscribe(_ =>
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -200,7 +200,9 @@ public sealed class GameData {
|
|||
// バイト君
|
||||
public int PartTimerLevel;
|
||||
public int PartTimerElapsed; // ゲーム起動中経過時間
|
||||
public int CustomizeCoinElapsed; // 羽の獲得用経過時間
|
||||
|
||||
private int[] usedItemCondition;
|
||||
public List<int> UsedItemCondition;
|
||||
|
||||
// mission
|
||||
[DataMember(Name = "Data1001")]
|
||||
|
@ -571,6 +573,7 @@ public sealed class GameData {
|
|||
ScrollGameStageScoreList = ScrollGameStageScoreList ?? new List<ScrollGameScoreData>();
|
||||
CityGameDataDict ??= new CityGameDataDict();
|
||||
FundingDict ??= new FundingDict();
|
||||
UsedItemCondition = usedItemCondition?.ToList() ?? new List<int>();
|
||||
}
|
||||
private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){
|
||||
var dictionary = new Dictionary<int, int>();
|
||||
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MyGame.Scripts
|
||||
{
|
||||
public class ItemConditionUtils
|
||||
{
|
||||
public static List<ItemConditionData> GetList()
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ItemConditionData>(Const.ItemConditionDataSheet);
|
||||
}
|
||||
|
||||
public static List<ScriptConditionData> GetScriptList()
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ScriptConditionData>(Const.ScriptConditionDataSheet);
|
||||
}
|
||||
|
||||
public static List<ItemConditionData> GetList(int cityId)
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ItemConditionData>(Const.ItemConditionDataSheet)
|
||||
.Where(data => data.cityId == cityId)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<ItemConditionData> GetList(int cityId, ItemCondition condition)
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ItemConditionData>(Const.ItemConditionDataSheet)
|
||||
.Where(data => data.cityId == cityId)
|
||||
.Where(data => data.Condition == condition)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<ItemConditionData> GetGlobalList(ItemCondition condition, int value) => GetList(0, condition, value);
|
||||
public static List<ItemConditionData> GetGlobalList(ItemCondition condition, int value, RewardActionType rewardActionType, bool ignoreUsed = false) => GetList(0, condition, value, rewardActionType, ignoreUsed);
|
||||
public static List<ItemConditionData> GetList(int cityId, ItemCondition condition, int value)
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ItemConditionData>(Const.ItemConditionDataSheet)
|
||||
.Where(data => data.cityId == cityId)
|
||||
.Where(data => data.Condition == condition)
|
||||
.Where(data => data.needValue <= value)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<ItemConditionData> GetList(int cityId, ItemCondition condition, int value, RewardActionType rewardActionType, bool ignoreUsed = false)
|
||||
{
|
||||
var ignoreList = ignoreUsed ? GameDataManager.GameData.UsedItemCondition : new List<int>();
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ItemConditionData>(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<ScriptConditionData> GetScriptList(int cityId, ItemCondition condition)
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ScriptConditionData>(Const.ScriptConditionDataSheet)
|
||||
.Where(data => data.cityId == cityId)
|
||||
.Where(data => data.Condition == condition)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<ScriptConditionData> GetScriptList(int cityId, ItemCondition condition, int value)
|
||||
{
|
||||
return SpreadsheetDataManager.Instance.GetBaseDataList<ScriptConditionData>(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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e6fa9bff677e4168bd7a82981de94ce4
|
||||
timeCreated: 1667534395
|
|
@ -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<GameData> 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
|
|||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -93,24 +90,7 @@ namespace MyGame.Scripts
|
|||
/// checkCountがTargetCount以上になれば受取可能
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue