Example-Code / CardArchitecture / BattleCard.cs
BattleCard.cs
Raw
using CCG.Bigfoot.TestScripts;
using CCG.Bigfoot.Utility;
using JetBrains.Annotations;
using UnityEngine;

namespace CCG.Bigfoot.CardScripts
{
    /// <summary>
    /// This is the card object used in battle on the card prefab that is used in battle.
    /// </summary>
    /// <remarks>
    /// Authors: CS
    /// Created: 2024-01-11
    /// </remarks>
    public sealed partial class BattleCard : BaseCard, IPoolable
    {
        [CanBeNull] public CardSpace CardSpace { get; private set; }

        #region IPoolable Implementation
        public ObjectPooler.PooledPrefabName Identifier { get; set; }
        public bool IsInUseEvenIfInactive { get; set; }
        public MonoBehaviour Mono { get; set; }
        #endregion

        #region Methods
        public static void Initialize(float initialPlaneDistance, float dragCardPlaneDistance, RectTransform dragCardRect, LayerMask cardSpaceLayerMask)
        {
            _initialPlaneDistance = initialPlaneDistance;
            _draggingPlaneDistance = dragCardPlaneDistance;
            _dragCardCanvasRect = dragCardRect;
            _cardSpaceLayerMask = cardSpaceLayerMask;
        }

        public void SetPortraitSortingGroup(int targetGroup)
        {
            _sortingGroup.sortingOrder = targetGroup;
        }
        public override void Set(ScriptableObject data)
        {
            base.Set(data);
        }
        public override void Wash()
        {
            base.Wash();
            Mono = null;
        }
        private void HideFields()
        {
            _nameField.gameObject.SetActive(false);
            _typeField.gameObject.SetActive(false);
            _abilityField.gameObject.SetActive(false);
        }
        
        public void SetActive(bool isActive)
        {
            gameObject.SetActive(isActive);
        }

        #region IPoolable Implementation
        void IPoolable.Setup(ScriptableObject data)
        {
            Set(data);
            Mono = this;
        }

        public void Activate()
        {
            SetActive(true);
        }

        public void Deactivate(bool isReturnToPoolAfterDeactivate)
        {
            Wash();
            SetActive(false);
            if (isReturnToPoolAfterDeactivate)
            {
                ObjectPooler.Instance.ReturnToPool(transform);
            }
        }
        #endregion
        #endregion
    }
}