- ability unlocks (90% done) - class unlocks (working) - new human base class - bugfix small issues
270 lines
10 KiB
C#
270 lines
10 KiB
C#
using Kryz.CharacterStats.Examples;
|
|
using Photon.Pun;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class PlayerDataHandler : MonoBehaviour
|
|
{
|
|
#region Singleton
|
|
private static PlayerDataHandler _instance;
|
|
|
|
// Public reference to the singleton instance
|
|
public static PlayerDataHandler Instance
|
|
{
|
|
get
|
|
{
|
|
// If the instance doesn't exist, try to find it in the scene
|
|
if (_instance == null)
|
|
{
|
|
_instance = FindObjectOfType<PlayerDataHandler>();
|
|
|
|
// If it's still null, create a new GameObject and add the component
|
|
if (_instance == null)
|
|
{
|
|
GameObject singletonObject = new GameObject(typeof(PlayerDataHandler).Name);
|
|
_instance = singletonObject.AddComponent<PlayerDataHandler>();
|
|
}
|
|
}
|
|
return _instance;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
public StringSharedField currentPlayerName;
|
|
public StringSharedField currentCharacterName;
|
|
public StringSharedField currentCharacterClass;
|
|
|
|
PlayerAccountData playerAccountData = new PlayerAccountData();
|
|
string playerAccountDataKey;
|
|
|
|
CharacterData characterData = new CharacterData();
|
|
string characterDataKey;
|
|
|
|
CoinData coinData = new CoinData();
|
|
string playerCoinKey;
|
|
|
|
EquipmentInstanceData equipmentData = new EquipmentInstanceData();
|
|
string equipmentDataKey;
|
|
|
|
InventoryInstanceData inventoryData = new InventoryInstanceData();
|
|
string inventoryDataKey;
|
|
|
|
BuildData buildData = new BuildData();
|
|
string buildDataKey;
|
|
|
|
string sunMapUsedKey;
|
|
string riverAveMapUsedKey;
|
|
string mapUsedKey;
|
|
string abilityTomeKey;
|
|
string classUnlockedKey;
|
|
|
|
int currentPageCount;
|
|
|
|
private void Awake()
|
|
{
|
|
DontDestroyOnLoad(this);
|
|
}
|
|
|
|
// Player account data (user name, character names list)
|
|
public PlayerAccountData LoadPlayerAccountData(string playerName)
|
|
{
|
|
playerAccountDataKey = GameConstants.PlayerPrefsKeys.GetPlayerAccountDataKey(playerName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(playerAccountDataKey))
|
|
{
|
|
playerAccountData = GameStatePersistenceManager.Instance.LoadData<PlayerAccountData>(playerAccountDataKey);
|
|
return playerAccountData;
|
|
}
|
|
else return null;
|
|
}
|
|
public void SavePlayerAccountData(string playerName, PlayerAccountData playerAccountData)
|
|
{
|
|
playerAccountDataKey = GameConstants.PlayerPrefsKeys.GetPlayerAccountDataKey(playerName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(playerAccountDataKey, playerAccountData);
|
|
}
|
|
|
|
// Character Data (Level, exp etc)
|
|
public CharacterData LoadCharacterData(string playerName, string characterName)
|
|
{
|
|
characterDataKey = GameConstants.PlayerPrefsKeys.GetCharacterDataKey(playerName, characterName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(characterDataKey))
|
|
{
|
|
characterData = GameStatePersistenceManager.Instance.LoadData<CharacterData>(characterDataKey);
|
|
return characterData;
|
|
}
|
|
else return null;
|
|
}
|
|
public void SaveCharacterData(string playerName, string characterName, CharacterData characterData)
|
|
{
|
|
characterDataKey = GameConstants.PlayerPrefsKeys.GetCharacterDataKey(playerName, characterName);
|
|
|
|
characterData.characterName = currentCharacterName.Value;
|
|
characterData.characterClass = currentCharacterClass.Value;
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(characterDataKey, characterData);
|
|
}
|
|
|
|
// Player Coin Data (global coin amount)
|
|
public CoinData LoadPlayerCoinData(string playerName)
|
|
{
|
|
playerCoinKey = GameConstants.PlayerPrefsKeys.GetPlayerCoinKey(playerName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(playerCoinKey))
|
|
{
|
|
coinData = GameStatePersistenceManager.Instance.LoadData<CoinData>(playerCoinKey);
|
|
return coinData;
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
public void SavePlayerCoinData(string playerName, CoinData coinData)
|
|
{
|
|
playerCoinKey = GameConstants.PlayerPrefsKeys.GetPlayerCoinKey(playerName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(playerCoinKey, coinData);
|
|
}
|
|
|
|
|
|
// Character Equipment Data (equipped items)
|
|
public EquipmentInstanceData LoadCharacterEquipmentData(string playerName, string characterName)
|
|
{
|
|
equipmentDataKey = GameConstants.PlayerPrefsKeys.GetCharacterEquipmentDataKey(playerName, characterName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(equipmentDataKey))
|
|
{
|
|
equipmentData = GameStatePersistenceManager.Instance.LoadData<EquipmentInstanceData>(equipmentDataKey);
|
|
return equipmentData;
|
|
}
|
|
else return null;
|
|
}
|
|
public void SaveCharacterEquipmentData(string playerName, string characterName, EquipmentInstanceData equipmentData)
|
|
{
|
|
equipmentDataKey = GameConstants.PlayerPrefsKeys.GetCharacterEquipmentDataKey(playerName, characterName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(equipmentDataKey, equipmentData);
|
|
}
|
|
|
|
|
|
// Character Inventory Data (items on inventory)
|
|
public InventoryInstanceData LoadCharacterInventoryData(string playerName, string characterName)
|
|
{
|
|
inventoryDataKey = GameConstants.PlayerPrefsKeys.GetCharacterInventoryDataKey(playerName, characterName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(inventoryDataKey))
|
|
{
|
|
inventoryData = GameStatePersistenceManager.Instance.LoadData<InventoryInstanceData>(inventoryDataKey);
|
|
return inventoryData;
|
|
}
|
|
else return null;
|
|
}
|
|
public void SaveCharacterInventoryData(string playerName, string characterName, InventoryInstanceData inventoryData)
|
|
{
|
|
inventoryDataKey = GameConstants.PlayerPrefsKeys.GetCharacterInventoryDataKey(playerName, characterName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(inventoryDataKey, inventoryData);
|
|
}
|
|
|
|
|
|
// Character Build Data (selected spells/awakenings)
|
|
public BuildData LoadCharacterBuildData(string playerName, string characterName)
|
|
{
|
|
buildDataKey = GameConstants.PlayerPrefsKeys.GetCharacterBuildDataKey(playerName, characterName);
|
|
|
|
if (GameStatePersistenceManager.Instance.HasDataForKey(buildDataKey))
|
|
{
|
|
buildData = GameStatePersistenceManager.Instance.LoadData<BuildData>(buildDataKey);
|
|
return buildData;
|
|
}
|
|
else return null;
|
|
}
|
|
public void SaveCharacterBuildData(string playerName, string characterName, BuildData buildData)
|
|
{
|
|
buildDataKey = GameConstants.PlayerPrefsKeys.GetCharacterBuildDataKey(playerName, characterName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveData(buildDataKey, buildData);
|
|
}
|
|
|
|
|
|
#region Progression
|
|
//Sun Map Used, Unlocked Sun Dragon's Lair
|
|
public bool SunMapUsed(string playerName)
|
|
{
|
|
sunMapUsedKey = GameConstants.PlayerPrefsKeys.GetSunMapUsedKey(playerName);
|
|
|
|
return GameStatePersistenceManager.Instance.HasDataForKey(sunMapUsedKey);
|
|
}
|
|
public void SaveSunMapUsedProgress(string playerName)
|
|
{
|
|
sunMapUsedKey = GameConstants.PlayerPrefsKeys.GetSunMapUsedKey(playerName);
|
|
|
|
GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(sunMapUsedKey, 1);
|
|
}
|
|
public void SaveRiverAveMapUsedProgress(string playerName)
|
|
{
|
|
riverAveMapUsedKey = GameConstants.PlayerPrefsKeys.GetMapUsedKeyByHiddenMapZone(playerName, HiddenMapZone.RiverAveMap);
|
|
|
|
GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(riverAveMapUsedKey, 1);
|
|
}
|
|
public void SaveMapUsedProgress(string playerName, HiddenMapZone map)
|
|
{
|
|
mapUsedKey = GameConstants.PlayerPrefsKeys.GetMapUsedKeyByHiddenMapZone(playerName, map);
|
|
|
|
GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(mapUsedKey, 1);
|
|
}
|
|
|
|
public bool HiddenMapUsed(string playerName, HiddenMapZone map)
|
|
{
|
|
mapUsedKey = GameConstants.PlayerPrefsKeys.GetMapUsedKeyByHiddenMapZone(playerName, map);
|
|
|
|
return GameStatePersistenceManager.Instance.HasDataForKey(mapUsedKey);
|
|
}
|
|
|
|
public void SaveAbilityTomeProgress(string playerName, int abilityIndex, int pageCount, bool initialization = false)
|
|
{
|
|
abilityTomeKey = GameConstants.PlayerPrefsKeys.GetAbilityTomeKey(playerName, abilityIndex);
|
|
|
|
currentPageCount = pageCount + GameStatePersistenceManager.Instance.LoadProgressDataCheckPoint(abilityTomeKey);
|
|
|
|
|
|
GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(abilityTomeKey, currentPageCount);
|
|
|
|
if (currentPageCount >= GameConstants.GameBalancing.TotalPagesPerAbilityTome && !initialization)
|
|
BuildLibrary.Instance.OnAbilityUnlocked(abilityIndex);
|
|
}
|
|
public int LoadAbilityTomeProgress(string playerName, int abilityIndex)
|
|
{
|
|
abilityTomeKey = GameConstants.PlayerPrefsKeys.GetAbilityTomeKey(playerName, abilityIndex);
|
|
|
|
currentPageCount = GameStatePersistenceManager.Instance.LoadProgressDataCheckPoint(abilityTomeKey);
|
|
|
|
return currentPageCount;
|
|
}
|
|
public bool AbilityTomeUnlocked(string playerName, int abilityIndex)
|
|
{
|
|
abilityTomeKey = GameConstants.PlayerPrefsKeys.GetAbilityTomeKey(playerName, abilityIndex);
|
|
|
|
currentPageCount = GameStatePersistenceManager.Instance.LoadProgressDataCheckPoint(abilityTomeKey);
|
|
|
|
return currentPageCount >= GameConstants.GameBalancing.TotalPagesPerAbilityTome;
|
|
}
|
|
public void SaveClassUnlockedProgress(string playerName, string className)
|
|
{
|
|
classUnlockedKey = GameConstants.PlayerPrefsKeys.GetClassUnlockedKey(playerName, className);
|
|
|
|
Debug.Log("Unlocked new class: " + className);
|
|
|
|
GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(classUnlockedKey, 1);
|
|
}
|
|
public bool ClassUnlocked(string playerName, string className)
|
|
{
|
|
classUnlockedKey = GameConstants.PlayerPrefsKeys.GetClassUnlockedKey(playerName, className);
|
|
|
|
Debug.Log("Class unlocked: " + GameStatePersistenceManager.Instance.HasDataForKey(classUnlockedKey));
|
|
return GameStatePersistenceManager.Instance.HasDataForKey(classUnlockedKey);
|
|
}
|
|
#endregion
|
|
}
|