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

This commit is contained in:
koya_15 2022-11-04 15:38:51 +09:00
commit 666699f7b6
11 changed files with 220 additions and 42 deletions

View File

@ -0,0 +1 @@
tH3z3Et10Knf4DgmAzuyNeZ7dYAsZVGGIxyUvbKPolUDqZJeexF/XwPpsBiPbouNvG39NB9EZOmGMlUZ1m980sZTu9k8bIFfmKQlHcJLjTdpITS5YMOfyUNNM/HIO9Nf

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 421e6ff37efa34561b5988b4609d80d6
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -35,8 +35,9 @@ namespace MyGame.Scenes.Main.Scripts
var (coin, heart) = PartTimerManager.CalcEarnings(partTimerData, cityGameData.PartTimerElapsed); var (coin, heart) = PartTimerManager.CalcEarnings(partTimerData, cityGameData.PartTimerElapsed);
coinText.text = coin.ToString(); coinText.text = coin.ToString();
heartText.text = heart.ToString(); heartText.text = heart.ToString();
shopCustomizeObject.SetActive(PartTimerManager.Instance.CheckEarningsCustomizeCoin(true)); var customizeCoin = PartTimerManager.Instance.CheckEarningsCustomizeCoin();
shopCustomizeCoinText.text = "1"; shopCustomizeObject.SetActive(customizeCoin > 0);
shopCustomizeCoinText.text = customizeCoin.ToString();
closeButton.OnClickAsObservable().Take(1).Subscribe(_ => closeButton.OnClickAsObservable().Take(1).Subscribe(_ =>
{ {

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MyGame.Scenes.Main.Scripts;
using MyGame.Scenes.marketing.Scripts; using MyGame.Scenes.marketing.Scripts;
using MyGame.Scripts; using MyGame.Scripts;
using TMPro; using TMPro;
@ -26,9 +27,10 @@ public class MarketManager : MonoBehaviour
[SerializeField] private Transform coinPrefab; [SerializeField] private Transform coinPrefab;
[SerializeField] private Transform rootTransform; [SerializeField] private Transform rootTransform;
[SerializeField] private TutorialObjectMask walkerMask; [SerializeField] private TutorialObjectMask walkerMask;
[SerializeField] private GameObject dollarBag;
private Market market; private Market market;
List<ProductData> productDataList; List<ProductData> productDataList;
private bool isPartTimer; private bool isPartTimerMode;
private readonly Subject<Unit> customerRewardTimerUpdateSubject = new Subject<Unit>(); private readonly Subject<Unit> customerRewardTimerUpdateSubject = new Subject<Unit>();
private readonly Subject<Unit> vipTimerUpdateSubject = new Subject<Unit>(); private readonly Subject<Unit> vipTimerUpdateSubject = new Subject<Unit>();
@ -41,7 +43,7 @@ public class MarketManager : MonoBehaviour
vipTimerUpdateSubject.AddTo(this); vipTimerUpdateSubject.AddTo(this);
market = WorldMarketManager.Instance.GetCurrentCityMarket(); market = WorldMarketManager.Instance.GetCurrentCityMarket();
market.CheckPartTimerMode(); market.CheckPartTimerMode();
isPartTimer = market.IsPartTimer; isPartTimerMode = market.IsPartTimer;
SoundManager.Instance.PlayBGM("bgm_marketing"); SoundManager.Instance.PlayBGM("bgm_marketing");
var globalGameData = GameDataManager.GameData; var globalGameData = GameDataManager.GameData;
@ -63,12 +65,36 @@ public class MarketManager : MonoBehaviour
// 最新の都市ではない場合、バイトが有効 // 最新の都市ではない場合、バイトが有効
if (!market.IsLatestCity) if (!market.IsLatestCity)
{ {
partTimerView.StartAnimation(isPartTimer); partTimerView.StartAnimation(isPartTimerMode);
} }
if (isPartTimer) dollarBag.SetActive(isPartTimerMode && cityGameData.PartTimerElapsed > 10);
if (isPartTimerMode)
{ {
rewardButtonView.gameObject.SetActive(false); rewardButtonView.gameObject.SetActive(false);
vipCustomerButtonView.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)) if (!globalGameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
@ -157,8 +183,8 @@ public class MarketManager : MonoBehaviour
{ {
vipCustomerButtonView.SetActive(isPause); vipCustomerButtonView.SetActive(isPause);
// バイト君モードでは兄弟非表示 // バイト君モードでは兄弟非表示
blueView.SetActive(!isPartTimer && !isPause); blueView.SetActive(!isPartTimerMode && !isPause);
BrotherPinkView.Instance.SetActive(!isPartTimer && !isPause); BrotherPinkView.Instance.SetActive(!isPartTimerMode && !isPause);
// 最新の都市ではない場合バイト非表示 // 最新の都市ではない場合バイト非表示
partTimerView.SetActive(!market.IsLatestCity && !isPause); partTimerView.SetActive(!market.IsLatestCity && !isPause);
}).AddTo(this); }).AddTo(this);
@ -313,7 +339,7 @@ displayFlavors: {market.DisplayFlavors.Aggregate("", (s, data) => $"{s},{data.Fl
.Subscribe(x => .Subscribe(x =>
{ {
var (isClose, isPromotion) = x; var (isClose, isPromotion) = x;
if (isClose || isPartTimer) if (isClose || isPartTimerMode)
{ {
BrotherPinkView.Instance.StopTasting(); BrotherPinkView.Instance.StopTasting();
rewardButtonView.gameObject.SetActive(false); rewardButtonView.gameObject.SetActive(false);
@ -491,7 +517,7 @@ displayFlavors: {market.DisplayFlavors.Aggregate("", (s, data) => $"{s},{data.Fl
}).AddTo(customerAnimator); }).AddTo(customerAnimator);
var eventTrigger = customerAnimator.gameObject.AddComponent<ObservableEventTrigger>(); var eventTrigger = customerAnimator.gameObject.AddComponent<ObservableEventTrigger>();
eventTrigger.OnPointerClickAsObservable() eventTrigger.OnPointerClickAsObservable()
.Where(_ => !isPartTimer) .Where(_ => !isPartTimerMode)
.Take(1) .Take(1)
.Subscribe(_ => .Subscribe(_ =>
{ {

View File

@ -3473,6 +3473,7 @@ MonoBehaviour:
type: 3} type: 3}
rootTransform: {fileID: 714437465} rootTransform: {fileID: 714437465}
walkerMask: {fileID: 237651842} walkerMask: {fileID: 237651842}
dollarBag: {fileID: 1217099569}
--- !u!1 &1026166058 --- !u!1 &1026166058
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -4171,6 +4172,8 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 1217099570} - component: {fileID: 1217099570}
- component: {fileID: 1217099571} - component: {fileID: 1217099571}
- component: {fileID: 1217099573}
- component: {fileID: 1217099572}
m_Layer: 5 m_Layer: 5
m_Name: DollarBag m_Name: DollarBag
m_TagString: Untagged m_TagString: Untagged
@ -4201,8 +4204,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 128, y: -321} m_AnchoredPosition: {x: 78, y: -271}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0, y: 1} m_Pivot: {x: 0, y: 1}
--- !u!95 &1217099571 --- !u!95 &1217099571
Animator: Animator:
@ -4224,6 +4227,30 @@ Animator:
m_HasTransformHierarchy: 1 m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1 m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0 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 --- !u!1 &1235629312
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -74,6 +74,9 @@ public static class Const {
public static readonly string CityDataSheet = "CityData"; public static readonly string CityDataSheet = "CityData";
public static readonly string FundingDataSheet = "FundingData"; public static readonly string FundingDataSheet = "FundingData";
public static readonly string PartTimerDataSheet = "PartTimerData"; 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 // language
public static readonly string LangJapanDataSheet = "LangJapanData"; public static readonly string LangJapanDataSheet = "LangJapanData";
@ -118,6 +121,9 @@ public static class Const {
new SheetData(Const.CityDataSheet), new SheetData(Const.CityDataSheet),
new SheetData(Const.FundingDataSheet), new SheetData(Const.FundingDataSheet),
new SheetData(Const.PartTimerDataSheet), new SheetData(Const.PartTimerDataSheet),
new SheetData(Const.CityShopLevelDataSheet),
new SheetData(Const.ItemConditionDataSheet),
new SheetData(Const.ScriptConditionDataSheet),
}; };
public static readonly SheetData[] LanguageSheetNameList = new SheetData[]{ public static readonly SheetData[] LanguageSheetNameList = new SheetData[]{
new SheetData(Const.LangJapanDataSheet, "LanguageData"), new SheetData(Const.LangJapanDataSheet, "LanguageData"),

View File

@ -200,7 +200,9 @@ public sealed class GameData {
// バイト君 // バイト君
public int PartTimerLevel; public int PartTimerLevel;
public int PartTimerElapsed; // ゲーム起動中経過時間 public int PartTimerElapsed; // ゲーム起動中経過時間
public int CustomizeCoinElapsed; // 羽の獲得用経過時間
private int[] usedItemCondition;
public List<int> UsedItemCondition;
// mission // mission
[DataMember(Name = "Data1001")] [DataMember(Name = "Data1001")]
@ -571,6 +573,7 @@ public sealed class GameData {
ScrollGameStageScoreList = ScrollGameStageScoreList ?? new List<ScrollGameScoreData>(); ScrollGameStageScoreList = ScrollGameStageScoreList ?? new List<ScrollGameScoreData>();
CityGameDataDict ??= new CityGameDataDict(); CityGameDataDict ??= new CityGameDataDict();
FundingDict ??= new FundingDict(); FundingDict ??= new FundingDict();
UsedItemCondition = usedItemCondition?.ToList() ?? new List<int>();
} }
private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){ private Dictionary<int, int> ArrayToDictionary(KeyValueOfintint[] array){
var dictionary = new Dictionary<int, int>(); var dictionary = new Dictionary<int, int>();
@ -587,6 +590,7 @@ public sealed class GameData {
// lastAdRewardTimeArray = lastAdRewardTimeList.ToArray(); // lastAdRewardTimeArray = lastAdRewardTimeList.ToArray();
achievedMission = AchievedMission.ToArray(); achievedMission = AchievedMission.ToArray();
deliveredOrder = DeliveredOrder.ToArray(); deliveredOrder = DeliveredOrder.ToArray();
usedItemCondition = UsedItemCondition.ToArray();
// CityGameData // CityGameData
foreach (var cityGameData in CityGameDataDict.Values) foreach (var cityGameData in CityGameDataDict.Values)
{ {

View File

@ -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);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e6fa9bff677e4168bd7a82981de94ce4
timeCreated: 1667534395

View File

@ -12,9 +12,6 @@ namespace MyGame.Scripts
{ {
[SerializeField] private int updateTiming = 2; [SerializeField] private int updateTiming = 2;
[SerializeField] private int saveTiming = 10; [SerializeField] private int saveTiming = 10;
[SerializeField] private int shopCustomizeCoinTiming = 86400; // 1day
[SerializeField] private int targetCount = 3;
private int checkCount;
private float saveElapsed; private float saveElapsed;
private List<GameData> partTimerList; private List<GameData> partTimerList;
private void Start() private void Start()
@ -38,8 +35,6 @@ namespace MyGame.Scripts
cityGameData.PartTimerElapsed += updateTiming; cityGameData.PartTimerElapsed += updateTiming;
} }
GameDataManager.GameData.CustomizeCoinElapsed += updateTiming;
saveElapsed += updateTiming; saveElapsed += updateTiming;
if (saveTiming < saveElapsed) if (saveTiming < saveElapsed)
{ {
@ -79,13 +74,15 @@ namespace MyGame.Scripts
/// <returns></returns> /// <returns></returns>
public int GetCustomizeCoin() public int GetCustomizeCoin()
{ {
if (CheckEarningsCustomizeCoin()) // 達成リスト
var list = ItemConditionUtils.GetGlobalList(ItemCondition.TotalHeart, GameDataUtils.GetTotalHeart(), RewardActionType.CustomizeCoin, true);
var rewardCount = 0;
list.ForEach(data =>
{ {
checkCount = 0; rewardCount += data.value;
GameDataManager.GameData.CustomizeCoinElapsed -= shopCustomizeCoinTiming; ItemConditionUtils.Use(data);
return 1; });
} return rewardCount;
return 0;
} }
/// <summary> /// <summary>
@ -93,24 +90,7 @@ namespace MyGame.Scripts
/// checkCountがTargetCount以上になれば受取可能 /// checkCountがTargetCount以上になれば受取可能
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public bool CheckEarningsCustomizeCoin(bool withCount = false) public int CheckEarningsCustomizeCoin() => ItemConditionUtils.GetGlobalList(ItemCondition.TotalHeart, GameDataUtils.GetTotalHeart(), RewardActionType.CustomizeCoin, true).Sum(data => data.value);
{
#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 static (int coin, int heart) CalcEarnings(PartTimerData partTimerData, int elapsed) public static (int coin, int heart) CalcEarnings(PartTimerData partTimerData, int elapsed)
{ {

View File

@ -181,6 +181,16 @@ public enum ScrollGameDifficulty
Extra = 4 Extra = 4
} }
public enum ItemCondition
{
TotalHeart = 1
}
public enum RewardActionType
{
CustomizeCoin = 1
}
[Serializable] [Serializable]
public sealed class MissionData public sealed class MissionData
{ {
@ -677,4 +687,37 @@ public sealed class PartTimerData
public int maxSales; public int maxSales;
public int maxHeart; public int maxHeart;
public string prefabName; 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;
} }