using Photon.Pun; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; using UnityEngine.Events; public class CastingStateController : MonoBehaviour { public bool isCasting; public PlayerMovement playerMovement; public LayerMask movementMask; private MovementSpeedModifierEffectInstance movementSpeedModifier; Camera cam; Ray ray; RaycastHit hit; PhotonView photonView; ProjectileSpawnLocationController projectileSpawnLocationController; public UnityEvent OnAbilityQueued = new UnityEvent(); private void Awake() { cam = Camera.main; photonView = GetComponentInParent(); movementSpeedModifier = playerMovement.GetComponent(); projectileSpawnLocationController = transform.root.GetComponentInChildren(); } private void Start() { if (!photonView.IsMine) this.enabled = false; } public void RequestAbilityCast(BaseAbility ability, Action abilityExecution) { if (isCasting) return; if (!ability.castableWhileMoving) { movementSpeedModifier.ToggleCastPenalty(true); //playerMovement.ToggleAgentMoving(true); } OnAbilityQueued.Invoke(ability); StartCoroutine(Casting(ability, abilityExecution)); } public void RequestAbilityChannel(BaseAbility channeledAbility, Action abilityChannelExecution) { if (isCasting) return; if (!channeledAbility.castableWhileMoving) { movementSpeedModifier.ToggleCastPenalty(true); //playerMovement.ToggleAgentMoving(true); } OnAbilityQueued.Invoke(channeledAbility); StartCoroutine(Channeling(channeledAbility, abilityChannelExecution)); } private IEnumerator Casting(BaseAbility ability, Action abilityExecution) { isCasting = true; CastBarHandler.Instance.ShowCastBar(ability, abilityExecution); playerMovement.InstantFaceCast(projectileSpawnLocationController.GetLookat()); //cast animation yield return new WaitForSeconds(ability.castTime); if (!GameConstants.Animation.IsAnimationEventBasedAbility(ability.animationType)) { abilityExecution.Invoke(); } isCasting = false; if (!ability.castableWhileMoving) { movementSpeedModifier.ToggleCastPenalty(false); //playerMovement.ToggleAgentMoving(false); } //Debug.Log("$$sCastbar Done casting"); } private IEnumerator Channeling(BaseAbility channeledAbility, Action abilityChannelExecution) { isCasting = true; CastBarHandler.Instance.ShowChannelingBar(channeledAbility, abilityChannelExecution); playerMovement.InstantFaceCast(projectileSpawnLocationController.GetLookat()); abilityChannelExecution.Invoke(); if (!channeledAbility.castableWhileMoving) { movementSpeedModifier.ToggleCastPenalty(true); //playerMovement.ToggleAgentMoving(true); } yield return null; } public void ResetChannelingCast() { isCasting = false; movementSpeedModifier.ToggleCastPenalty(false); //playerMovement.ToggleAgentMoving(false); } public void ResetCastingOnMeleeAnimationEvent() { isCasting = false; movementSpeedModifier.ToggleCastPenalty(false); //playerMovement.ToggleAgentMoving(false); StopAllCoroutines(); //Debug.Log("$$ResetCastingState On Event"); } }