Handle Ability Input

 avatar
unknown
plain_text
2 months ago
3.5 kB
3
Indexable
using System;
using GameCore.LoadoutSelection;
using PlayerCore.PlayerComponents;
using PlayerCore.Upgrades.AbilityInputData;
using PlayerCore.Upgrades.Base;
using PlayerCore.Upgrades.UpgradeFactory;
using UnityEngine;

namespace UserInterface.AbilityInput
{
    public interface IAbilityInputPanel
    {
        void Initialize(FAbilityInputData data);
        string GetActivationDescription(UpgradeDefinitionSO upgrade);

    }
    
    public struct FAbilityInputData
    {
        public string abilityInputTitle;
        public UpgradeDefinitionSO upgrade;
        public Action<UpgradeDefinitionSO, IAbilityInputData> onConfirmEvent;
        
        public FAbilityInputData( string abilityInputTitle, UpgradeDefinitionSO upgrade, Action<UpgradeDefinitionSO, IAbilityInputData> onConfirmEvent)
        {
            this.abilityInputTitle = abilityInputTitle;
            this.upgrade = upgrade;
            this.onConfirmEvent = onConfirmEvent;
        }
    }
    
    public class AbilityInputManager : MonoBehaviour
    {
        [Header("UI Panels")]
        [SerializeField] private GameObject confirmationPanel;
        [SerializeField] private GameObject choiceSelectionPanel;
        [SerializeField] private GameObject targetUpgradePanel;
        
        private IAbilityInputPanel confirmationInputPanel;
        private IAbilityInputPanel choiceSelectionInputPanel;
        private IAbilityInputPanel targetUpgradeInputPanel;
        
        private const string ACTIVATIONPROMPT = "Ability Activation";

        private void Awake()
        {
            confirmationInputPanel = confirmationPanel.GetComponent<ConfirmationPanelManager>();
            choiceSelectionInputPanel = choiceSelectionPanel.GetComponent<ChoiceSelectionPanel>();
            targetUpgradeInputPanel = targetUpgradePanel.GetComponent<TargetUpgradeSelectionPanel>();
            
            if(confirmationPanel == null) Debug.LogError("Confirmation Panel Manager is null");
            if(choiceSelectionPanel == null) Debug.LogError("Choice Selection Panel Manager is null");
            if(targetUpgradePanel == null) Debug.LogError("Target Upgrade Selection Panel Manager is null");
        }
        
        public void PromptForConfirmation(FLoadoutCardObj cardObjInfo, Action<UpgradeDefinitionSO, IAbilityInputData> onAbilityConfirmed)
        {
            //Handle relevant processing for which prompt to show, and call the callback
            //Get the relevant confirmationPayload and initialize confirmationPanel.
            FAbilityInputData abilityInputPayload = new FAbilityInputData(ACTIVATIONPROMPT, cardObjInfo.upgradeSO, onAbilityConfirmed);

            switch (cardObjInfo.upgradeSO.abilityConfirmationType)
            {
                case AbilityConfirmationType.ChoiceSeal:

                    choiceSelectionInputPanel.Initialize(abilityInputPayload);
                    choiceSelectionPanel.SetActive(true);
                    break;
                
                case AbilityConfirmationType.TargetUpgrade:

                    targetUpgradeInputPanel.Initialize(abilityInputPayload);
                    targetUpgradePanel.SetActive(true);
                    break;
                
                default:
                    confirmationInputPanel.Initialize(abilityInputPayload);
                    confirmationPanel.SetActive(true); 
                    break;
            }
        }
    }
}
Leave a Comment