Files

230 lines
5.8 KiB
C#

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 SetCurrentLevel(int value)
{
player_currentLevel = 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
}
}