using Kryz.CharacterStats.Examples; using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine; public class AbilityKeyBinder : MonoBehaviour { [SerializeField] private BaseAbility ability; [SerializeField] private GameKey key; [SerializeField] private CastingStateController castingStateController; [SerializeField] private GameEvent_AbilityKeyBinder onAbilityKeyBinderSpawned; private PhotonView user; private Taggable userTag; private Mana mana; public BaseAbility Ability => ability; public GameKey GameKey => key; Coroutine currentChanneling; NetworkedChanneling networkedChanneling; AbilityBindInstance abilityBindInstance; private void Awake() { user = GetComponentInParent(); userTag = GetComponentInParent(); mana = GetComponentInParent(); } private void Start() { if (!user.IsMine) { this.enabled = false; return; } onAbilityKeyBinderSpawned.Raise(this); } // Update is called once per frame void Update() { if (Input.GetKeyDown(key.keyCode)) { if (abilityBindInstance != null) abilityBindInstance.pressed.SetActive(true); if (mana.EnoughMana(ability.manaCost)) { if(ability is ChanneledAbility) { castingStateController.RequestAbilityChannel(ability, () => networkedChanneling = ((ChanneledAbility)ability).ExecuteChannel(user, userTag, ref currentChanneling)); } else castingStateController.RequestAbilityCast(ability, () => ability.Execute(user, userTag)); } } if(Input.GetKeyUp(key.keyCode)) { if (abilityBindInstance != null) abilityBindInstance.pressed.SetActive(false); if (currentChanneling != null) { StopCoroutine(currentChanneling); castingStateController.ResetChannelingCast(); CastBarHandler.Instance.CancelChannelingOnButtonReleased(); } if(networkedChanneling != null) { networkedChanneling.channeling = false; networkedChanneling.DisableVisuals(); } } } public void SetupAbilityBindInstance(AbilityBindInstance abilityBindInstance) { this.abilityBindInstance = abilityBindInstance; mana.onResourceChanged.AddListener(OnManaChanged); } public void OnManaChanged(float currentMana) { abilityBindInstance.noMana.SetActive(!mana.EnoughMana(ability.manaCost)); } }