Files
tcg-client/Assets/TcgEngine/Scripts/Data/PackData.cs
YiHan0621 2e4a318ca3 UI导入
2025-10-11 14:30:38 +08:00

166 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TcgEngine
{
public enum TradeCurrency
{
Coin , // 金币
Crystal, // 水晶(通用充值货币)
}
/// <summary>
/// 定义所有包的数据
/// </summary>
[CreateAssetMenu(fileName = "PackData", menuName = "TcgEngine/PackData", order = 5)]
public class PackData : ScriptableObject
{
public string id;
[Header("Content")]
public PackType type;
public int cards = 5; //Cards per pack
public PackRarity[] rarities_1st; //Probability of each rarity, for first card
public PackRarity[] rarities; //Probability of each rarity, for other cards
public PackVariant[] variants; //Probability of each variant, for other cards
[Header("Display")]
public string title;
public Sprite pack_img;
public Sprite cardback_img;
[Header("Dynamic Art Paths")]
public string pack_img_path;
public string cardback_img_path;
[TextArea(5, 10)]
public string desc;
public int sort_order;
[Header("Availability")]
public bool available = true;
public int cost = 100; //Cost to buy
public TradeCurrency tradeCurrency;
public static List<PackData> pack_list = new List<PackData>();
public static void Load(string folder = "")
{
if (pack_list.Count == 0)
pack_list.AddRange(Resources.LoadAll<PackData>(folder));
pack_list.Sort((PackData a, PackData b) => {
if (a.sort_order == b.sort_order)
return a.id.CompareTo(b.id);
else
return a.sort_order.CompareTo(b.sort_order);
});
}
public string GetTitle()
{
return title;
}
public string GetDesc()
{
return desc;
}
/// <summary>
/// 获取Pack图片优先使用动态路径
/// </summary>
public Sprite GetPackImage()
{
if (!string.IsNullOrEmpty(pack_img_path))
{
Sprite dynamicSprite = SpriteLoader.Get()?.LoadSprite(pack_img_path);
if (dynamicSprite != null)
{
return dynamicSprite;
}
else
{
Debug.LogWarning($"Pack {id} 图片加载失败: {pack_img_path}");
}
}
else
{
Debug.LogWarning($"Pack {id} pack_img_path为空");
}
return pack_img;
}
/// <summary>
/// 获取卡背图片,优先使用动态路径
/// </summary>
public Sprite GetCardbackImage()
{
if (!string.IsNullOrEmpty(cardback_img_path))
{
Sprite dynamicSprite = SpriteLoader.Get()?.LoadSprite(cardback_img_path);
if (dynamicSprite != null)
{
return dynamicSprite;
}
else
{
Debug.LogWarning($"Pack {id} 卡包图片加载失败: {cardback_img_path}");
}
}
else
{
Debug.LogWarning($"Pack {id} cardback_img_path为空");
}
return cardback_img;
}
public static PackData Get(string id)
{
foreach (PackData pack in GetAll())
{
if (pack.id == id)
return pack;
}
return null;
}
public static List<PackData> GetAllAvailable()
{
List<PackData> valid_list = new List<PackData>();
foreach (PackData apack in GetAll())
{
if (apack.available)
valid_list.Add(apack);
}
return valid_list;
}
public static List<PackData> GetAll()
{
return pack_list;
}
}
public enum PackType
{
Random = 0,
Fixed = 10,
}
[System.Serializable]
public struct PackRarity
{
public RarityData rarity;
public int probability;
}
[System.Serializable]
public struct PackVariant
{
public VariantData variant;
public int probability;
}
}