RiftMayhem/Assets/Scripts/Items/PlayerDataHandler.cs
Pedro Gomes 9461120386 Rogue-lite progression continued (WIP)
- ability unlocks (90% done)
- class unlocks (working)
- new human base class
- bugfix small issues
2025-01-19 23:18:07 +00:00

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
}