chicken_dy/Assets/Scripts/Storage/PlayerData.cs

165 lines
3.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerData : StorageBase<PlayerData>
{
public int CurrentLevel
{
get
{
return mCurrentLevel;
}
set
{
mCurrentLevel = Mathf.Clamp(value, 1, GameConfig.Instance.LevelSort.Count);
Save();
}
}
[SerializeField]private int mCurrentLevel = 1;
public int UnlockedLevel
{
get
{
return mUnlockedLevel;
}
}
[SerializeField] private int mUnlockedLevel = 1;
public int CurrentLevelID
{
get
{
return GameConfig.Instance.LevelSort[mCurrentLevel - 1];
}
}
public bool HasShowedReview
{
get
{
return mHasShowedReview;
}
}
[SerializeField] private bool mHasShowedReview = false;
[SerializeField] private Dictionary<int, List<int>> mEndingDic = new Dictionary<int, List<int>>();
[SerializeField] private Dictionary<int, List<int>> mEndingAdTipDic = new Dictionary<int, List<int>>();
public void UnlockNewLevel(bool pCheckCurrent = true)
{
bool tUnlockable = !pCheckCurrent || (mCurrentLevel == mUnlockedLevel);
if (tUnlockable && mUnlockedLevel < GameConfig.Instance.LevelSort.Count)
{
mUnlockedLevel++;
Save();
}
}
public void UnlockAllLevel()//for debug
{
mUnlockedLevel = GameConfig.Instance.LevelSort.Count;
Save();
}
public bool HasUnlockedAllLevel()
{
return mUnlockedLevel == GameConfig.Instance.LevelSort.Count;
}
public bool IsNextLevelPassed()
{
if (mCurrentLevel == GameConfig.Instance.LevelSort.Count)
{
return true;
}
int tNextLvID = GameConfig.Instance.LevelSort[mCurrentLevel];//+1 - 1
return LevelReachGoodEnding(tNextLvID);
}
public bool AddEnding(int pLevelID, int pEndingID)
{
if (!mEndingDic.ContainsKey(pLevelID))
{
mEndingDic[pLevelID] = new List<int>();
}
if (!mEndingDic[pLevelID].Contains(pEndingID))
{
mEndingDic[pLevelID].Add(pEndingID);
Save();
return true;
}
return false;
}
public int EndingCountOfLevel(int pLevelID)
{
if (mEndingDic.ContainsKey(pLevelID))
{
return mEndingDic[pLevelID].Count;
}
return 0;
}
public bool LevelReachGoodEnding(int pLevelID)
{
if (mEndingDic.ContainsKey(pLevelID))
{
LevelData tLvData = GameConfig.Instance.GetLevelData(pLevelID);
for (int i = 0; i < tLvData.Endings.Count; i++)
{
if (tLvData.Endings[i].IsGoodEnding && mEndingDic[pLevelID].Contains(i))
{
return true;
}
}
}
return false;
}
public bool HasUnlockedEnding(int pLevelID, int pEndingID)
{
return mEndingDic.ContainsKey(pLevelID) && mEndingDic[pLevelID].Contains(pEndingID);
}
public void AddEndingAdTip(int pLevelID, int pEndingID)
{
if (!mEndingAdTipDic.ContainsKey(pLevelID))
{
mEndingAdTipDic[pLevelID] = new List<int>();
}
if (!mEndingAdTipDic[pLevelID].Contains(pEndingID))
{
mEndingAdTipDic[pLevelID].Add(pEndingID);
Save();
}
}
public int EndingAdTipCountOfLevel(int pLevelID)
{
if (mEndingAdTipDic.ContainsKey(pLevelID))
{
return mEndingAdTipDic[pLevelID].Count;
}
return 0;
}
public bool HasWatchedEndingAdTip(int pLevelID, int pEndingID)
{
return mEndingAdTipDic.ContainsKey(pLevelID) && mEndingAdTipDic[pLevelID].Contains(pEndingID);
}
public void MarkReviewShowed()
{
mHasShowedReview = true;
}
}