デイリーミッション処理追加
This commit is contained in:
parent
9f56c50a0e
commit
70f1f2e221
File diff suppressed because it is too large
Load Diff
|
|
@ -73,7 +73,7 @@ public class Information : MonoBehaviour
|
|||
var shopLevelData = shopLevelList.FirstOrDefault(data => data.shopLevel == gameData.ViewedShopLevel) ?? shopLevelList[0];
|
||||
var nextShopLevelData = shopLevelList.FirstOrDefault(data => data.shopLevel == gameData.ViewedShopLevel + 1);
|
||||
var nextLevelHeart = nextShopLevelData?.heart ?? shopLevelData.heart;
|
||||
totalDayText.text = String.Format(dayFormat, 1);
|
||||
totalDayText.text = String.Format(dayFormat, gameData.dailyLoginCount);
|
||||
totalSalesText.text = String.Format(salesFormat, gameData.TotalSales);
|
||||
totalCoinText.text = gameData.TotalAddCoin.ToString();
|
||||
achievementText.text = shopLevelData.achievement;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ public class MissionListView : MonoBehaviour
|
|||
[SerializeField] private MissionTabView dailyTab;
|
||||
[SerializeField] private ScrollRect scrollRect;
|
||||
[SerializeField] private MissionView itemViewPrefab;
|
||||
[SerializeField] private MissionView dailyCompleteItemViewPrefab;
|
||||
|
||||
private readonly ReactiveProperty<MissionCategory> selectedTab = new ReactiveProperty<MissionCategory>();
|
||||
public IReadOnlyReactiveProperty<MissionCategory> SelectedTab => selectedTab;
|
||||
|
|
@ -60,6 +61,18 @@ public class MissionListView : MonoBehaviour
|
|||
return Instantiate(itemViewPrefab, tabs[index].content);
|
||||
}
|
||||
|
||||
public MissionView AddDailyCompleteItemView()
|
||||
{
|
||||
var index = tabs.FindIndex(x => x.category == MissionCategory.Daily);
|
||||
if (index == -1)
|
||||
{
|
||||
index = tabs.Count;
|
||||
var content = scrollRect.content;
|
||||
tabs.Add((MissionCategory.Daily, Instantiate(content, content.parent)));
|
||||
}
|
||||
return Instantiate(dailyCompleteItemViewPrefab, tabs[index].content);
|
||||
}
|
||||
|
||||
public void SetTab(MissionCategory category)
|
||||
{
|
||||
selectedTab.SetValueAndForceNotify(category);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
|
@ -9,6 +11,7 @@ public class MissionManager : MonoBehaviour
|
|||
private static readonly string TimeFormat = "更新まで:{0}時間{1}分{2}秒";
|
||||
private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger");
|
||||
private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger");
|
||||
private static readonly int dailyMissionCompleteRewardCoin = 50;
|
||||
|
||||
[SerializeField] private Animator backgroundAnimator;
|
||||
[SerializeField] private Button closeButton;
|
||||
|
|
@ -33,11 +36,31 @@ public class MissionManager : MonoBehaviour
|
|||
timeLimitText.gameObject.SetActive(category == MissionCategory.Daily);
|
||||
}).AddTo(this);
|
||||
|
||||
var gameData = GameDataManager.GameData;
|
||||
|
||||
// デイリーカウントダウン
|
||||
var limitTime = gameData.GetDailyMissionLimitTime();
|
||||
if (limitTime.TotalSeconds > 0)
|
||||
{
|
||||
timeLimitText.text = String.Format(TimeFormat, limitTime.Hours, limitTime.Minutes, limitTime.Seconds);
|
||||
}
|
||||
else
|
||||
{
|
||||
timeLimitText.text = String.Format(TimeFormat, 0, 0, 0);
|
||||
}
|
||||
Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1f))
|
||||
.Select(x => limitTime.Add(TimeSpan.FromSeconds(-x)))
|
||||
.TakeWhile(x => x.TotalSeconds > 0)
|
||||
.Subscribe(x =>
|
||||
{
|
||||
timeLimitText.text = String.Format(TimeFormat, x.Hours, x.Minutes, x.Seconds);
|
||||
}).AddTo(this);
|
||||
|
||||
// ミッション読み込み
|
||||
var missionList = SpreadsheetDataManager.Instance.GetBaseDataList<MissionData>(Const.MissionDataSheet);
|
||||
|
||||
// ミッション表示
|
||||
foreach (var missionData in missionList)
|
||||
foreach (var missionData in missionList.Where(data => data.Category == MissionCategory.Normal && data.shopLevel <= gameData.ViewedShopLevel))
|
||||
{
|
||||
var missionView = listView.AddItemView(missionData);
|
||||
var progressValue = GetProgressValue(missionData);
|
||||
|
|
@ -57,6 +80,60 @@ public class MissionManager : MonoBehaviour
|
|||
missionView.SetRewarded();
|
||||
// 達成ID保存
|
||||
GameDataManager.GameData.AchievedMission.Add(missionData.id);
|
||||
GameDataManager.SaveGameData();
|
||||
})));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement);
|
||||
}).AddTo(missionView);
|
||||
}
|
||||
|
||||
// dailyMission
|
||||
// コンプリートミッション
|
||||
{
|
||||
var missionView = listView.AddDailyCompleteItemView();
|
||||
var missionData = new MissionData(){count = 3, reward = dailyMissionCompleteRewardCoin, text = "デイリーミッションすべて完了で達成"};
|
||||
var progressValue = gameData.dailyMissionAchievedIdArray.Length;
|
||||
missionView.SetData(missionData, progressValue);
|
||||
missionView.SetButtonActive(missionData.count <= progressValue);
|
||||
if (gameData.dailyMissionCompleted) // 達成済み
|
||||
{
|
||||
missionView.SetRewarded();
|
||||
}
|
||||
|
||||
// リワード獲得
|
||||
missionView.RewardButton.ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
|
||||
{
|
||||
LocalCacheManager.Save(MissionDataTag, (missionData, new Action(() =>
|
||||
{
|
||||
GetDailyMissionCompleteReward();
|
||||
missionView.SetRewarded();
|
||||
// 達成ID保存
|
||||
gameData.dailyMissionCompleted = true;
|
||||
GameDataManager.SaveGameData();
|
||||
})));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement);
|
||||
}).AddTo(missionView);
|
||||
}
|
||||
foreach (var missionData in missionList.Where(data => gameData.dailyMissionIdArray.Contains(data.id)))
|
||||
{
|
||||
var missionView = listView.AddItemView(missionData);
|
||||
var progressValue = GetDailyProgressValue(missionData);
|
||||
missionView.SetData(missionData, progressValue);
|
||||
missionView.SetButtonActive(missionData.count <= progressValue);
|
||||
if (gameData.dailyMissionAchievedIdArray.Contains(missionData.id)) // 達成済み
|
||||
{
|
||||
missionView.SetRewarded();
|
||||
}
|
||||
|
||||
// リワード獲得
|
||||
missionView.RewardButton.ThrottleFirst(TimeSpan.FromSeconds(1f)).Subscribe(_ =>
|
||||
{
|
||||
LocalCacheManager.Save(MissionDataTag, (missionData, new Action(() =>
|
||||
{
|
||||
GetReward(missionData);
|
||||
missionView.SetRewarded();
|
||||
// 達成ID保存
|
||||
gameData.dailyMissionAchievedIdArray = new List<int>(gameData.dailyMissionIdArray){missionData.id}.ToArray();
|
||||
GameDataManager.SaveGameData();
|
||||
})));
|
||||
TransitionManager.Instance.LoadSceneAdditive(GameScenes.MissionAchievement);
|
||||
}).AddTo(missionView);
|
||||
|
|
@ -312,4 +389,10 @@ public class MissionManager : MonoBehaviour
|
|||
GameDataManager.GameData.Coin = CoinManager.Instance.OwnCoin;
|
||||
}
|
||||
}
|
||||
|
||||
private void GetDailyMissionCompleteReward()
|
||||
{
|
||||
CoinManager.Instance.AddCoinWithEffect(dailyMissionCompleteRewardCoin);
|
||||
GameDataManager.GameData.Coin = CoinManager.Instance.OwnCoin;
|
||||
}
|
||||
}
|
||||
|
|
@ -52,6 +52,49 @@ public class GameDataObserver : SingletonMonoBehaviour<GameDataObserver>
|
|||
.DistinctUntilChanged()
|
||||
.Publish(false)
|
||||
.RefCount();
|
||||
ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); });
|
||||
#if UNITY_EDITOR
|
||||
// ShopLevelUpdate.Subscribe(x => { Debug.Log($"change:{x}"); });
|
||||
#endif
|
||||
// デイリーミッション日付チェック
|
||||
sceneCounter
|
||||
.Where(x => x <= 1)
|
||||
.Subscribe(x =>
|
||||
{
|
||||
if (gameData.ViewedShopLevel == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var lastSetDateUtc = DateTime.FromBinary(gameData.lastDailyMissionSetTime);
|
||||
// 現時刻が最後にデイリーミッションを設定した日より前の場合無視(時間操作対策)
|
||||
if (lastSetDateUtc > DateTime.UtcNow)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.Log($"不正な時刻 {lastSetDateUtc:s}");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
// ミッションリセットチェック(0時)
|
||||
if (gameData.GetDailyMissionLimitTime().TotalSeconds > 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
Debug.Log($"reset daily mission");
|
||||
#endif
|
||||
// ミッション実績リセット
|
||||
gameData.dailyMissionAchievedIdArray = new int[0];
|
||||
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();
|
||||
gameData.lastDailyMissionSetTime = DateTime.UtcNow.ToBinary();
|
||||
gameData.dailyLoginCount++;
|
||||
GameDataManager.SaveGameData();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue