Example-Code / CardArchitecture / BaseCard.cs
BaseCard.cs
Raw
using CCG.Bigfoot.ScriptableObjects;
using System.Collections.Generic;
using CCG.Bigfoot.Utility;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Rendering;

namespace CCG.Bigfoot.CardScripts
{
    /// <summary>
    /// Common behavior between CollectionCard and BattleCard goes here.
    /// </summary>
    /// <remarks> Be diligent; refactor this class often to have shared behavior between CollectionCard and BattleCard
    /// Authors: CS
    /// Created: 2024-01-11
    /// </remarks>
    public class BaseCard : MonoBehaviour
    {
        #region Variables
        protected RectTransform _rectTransform = null;
        [Header("Card Assets")]
        [SerializeField] protected TMP_Text _cardDescription; //--Ability == Description.
        [SerializeField] protected TMP_Text _nameField;
        [SerializeField] protected TMP_Text _typeField;
        [SerializeField] protected TMP_Text _abilityField;
        [SerializeField] protected TMP_Text _powerValueField;
        [SerializeField] protected TMP_Text _healthValueField;
        [SerializeField] protected SpriteRenderer _cardArtRenderer;
        [SerializeField] protected SpriteRenderer _frameRenderer;
        [SerializeField] protected SpriteRenderer _tierRenderer;
        [SerializeField] protected SortingGroup _sortingGroup;

        private static readonly Dictionary<NameFontMaterialType, string> _nameFontMaterials = new()
        { 
            {NameFontMaterialType.Normal, "Fonts & Materials/Gotham-Black_Normal"},
            {NameFontMaterialType.Leader, "Fonts & Materials/Gotham-Black_Leader"}
        };

        public CardData CardData { get; protected set; }
        #endregion

        #region Callbacks
        #endregion

        #region Methods
        /// <summary>
        /// Applies the data to the model for viewing.
        /// </summary>
        /// <param name="data"></param>
        public virtual void Set(ScriptableObject data)
        {
            if (data == null)
            {
                Debug.Log("[Set] - Null data.");
                Wash();
                transform.ResetLocal();
                return;
            }
            try
            {
                CardData = data as CardData;
                
                string fontMaterial = _nameFontMaterials[CardData.NameFontType];
                if (fontMaterial.Length > 0)
                {
                    Material nameMaterial = Resources.Load<Material>(fontMaterial);
                    if (nameMaterial != null)
                    {
                        _nameField.fontMaterial = nameMaterial;
                    }
                }
                
                _nameField.text = CardData.Name;
                _typeField.text = CardData.Type.ToString();
                _powerValueField.text = CardData.Attack.ToString();
                _healthValueField.text = CardData.Health.ToString();
                _cardArtRenderer.sprite = CardData.Artwork;
                _tierRenderer.sprite = CardData.TierArt;
                _frameRenderer.sprite = CardData.FrameArt;
                _abilityField.text = CardData.Description;//--Description == Ability
                
                _rectTransform = transform as RectTransform;
                
            }
            catch { Debug.LogError("[Set] - Caught error."); }
        }
        public virtual void Wash()
        {
            CardData = null;
            _nameField.text = string.Empty;
            _typeField.text = string.Empty;
            _powerValueField.text = string.Empty;
            _healthValueField.text = string.Empty;
            _cardArtRenderer.sprite = null;
            _tierRenderer.sprite = null;
            _frameRenderer.sprite = null;
        }
        #endregion
    }
}