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(); // 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(); } } 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; 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(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(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(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(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(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(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) { abilityTomeKey = GameConstants.PlayerPrefsKeys.GetAbilityTomeKey(playerName, abilityIndex); currentPageCount = pageCount + GameStatePersistenceManager.Instance.LoadProgressDataCheckPoint(abilityTomeKey); GameStatePersistenceManager.Instance.SaveProgressDataCheckPoint(abilityTomeKey, currentPageCount); } 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; } #endregion }