using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "PlayerDefaultSO", menuName = "SO_Data/PlayerSO")] public class Player_SO : ScriptableObject { [Header("Inspector")] public int player_currentEXP; [Header("economics")] [SerializeField] private int player_coins; [SerializeField] private int player_material; [Header("levels")] [SerializeField] private int player_currentLevel; [Header("exp bottles")] [SerializeField] private int commonExpBottle78001; [SerializeField] private int mediumExpBottle78002; [SerializeField] private int superiorExpBottle78003; [SerializeField] private int supremeExpBottle78004; [SerializeField] private int extraordinaryExpBottle78005; [SerializeField] private int celestialExpBottle78006; [Header("combat analytics")] [SerializeField] private float uRankingScore; [Header("dush materials")] [SerializeField] private int dushMaterial78021; [SerializeField] private int dushMaterial78022; [SerializeField] private int dushMaterial78023; [SerializeField] private int dushMaterial78024; [Header("Device Records")] public string firstLaunchDate; public int Coins { get { return player_coins; } } public int Material { get { return player_material; } } public float URankingScore { get { return uRankingScore; } } public void SetCoins(int value) { player_coins = Mathf.Max(0, value); PersistEditorChanges(); } public void AddCoins(int amount) { if (amount == 0) { return; } SetCoins(player_coins + amount); } public void AddMaterial(int amount) { if (amount == 0) { return; } SetMaterial(player_material + amount); } public void AddPlayerExperience(int amount) { if (amount == 0) { return; } player_currentEXP = Mathf.Max(0, player_currentEXP + amount); PersistEditorChanges(); } public void SetURankingScore(float value) { uRankingScore = Mathf.Max(0f, value); PersistEditorChanges(); } public void AddURankingScore(float delta) { if (Mathf.Approximately(delta, 0f)) { return; } SetURankingScore(uRankingScore + delta); } public bool TrySpendCoins(int amount) { if (amount <= 0) { return true; } if (player_coins < amount) { return false; } SetCoins(player_coins - amount); return true; } public void SetMaterial(int value) { player_material = Mathf.Max(0, value); PersistEditorChanges(); } public void SetLegacyExpBottleCount(string fieldName, int value) { int safeValue = Mathf.Max(0, value); switch (fieldName) { case "commonExpBottle78001": commonExpBottle78001 = safeValue; break; case "mediumExpBottle78002": mediumExpBottle78002 = safeValue; break; case "superiorExpBottle78003": superiorExpBottle78003 = safeValue; break; case "supremeExpBottle78004": supremeExpBottle78004 = safeValue; break; case "extraordinaryExpBottle78005": extraordinaryExpBottle78005 = safeValue; break; case "celestialExpBottle78006": celestialExpBottle78006 = safeValue; break; default: return; } PersistEditorChanges(); } public int GetLegacyExpBottleCount(string fieldName) { switch (fieldName) { case "commonExpBottle78001": return commonExpBottle78001; case "mediumExpBottle78002": return mediumExpBottle78002; case "superiorExpBottle78003": return superiorExpBottle78003; case "supremeExpBottle78004": return supremeExpBottle78004; case "extraordinaryExpBottle78005": return extraordinaryExpBottle78005; case "celestialExpBottle78006": return celestialExpBottle78006; default: return 0; } } public int GetLegacyDushMaterialCount(string fieldName) { switch (fieldName) { case "dushMaterial78021": return dushMaterial78021; case "dushMaterial78022": return dushMaterial78022; case "dushMaterial78023": return dushMaterial78023; case "dushMaterial78024": return dushMaterial78024; default: return 0; } } public void SetLegacyDushMaterialCount(string fieldName, int value) { int safeValue = Mathf.Max(0, value); switch (fieldName) { case "dushMaterial78021": dushMaterial78021 = safeValue; break; case "dushMaterial78022": dushMaterial78022 = safeValue; break; case "dushMaterial78023": dushMaterial78023 = safeValue; break; case "dushMaterial78024": dushMaterial78024 = safeValue; break; default: return; } PersistEditorChanges(); } private void PersistEditorChanges() { #if UNITY_EDITOR if (!Application.isPlaying) { UnityEditor.EditorUtility.SetDirty(this); } #endif } }