private IEnumerator AttackAnimationRoutine(ETaggingBehavior _nextTaggingState) { Debug.Log($"Attack Animation Routine: {hammerTransform}"); hammerTransform.Rotate(new Vector3(1f, 0f, 0f), 90f); // hammerTransform.localPosition = transform.forward + hammerTransform.localPosition + new Vector3(0f, 0f, 1f); yield return(new WaitForSecondsRealtime(km_attackTime)); hammerTransform.localPosition = m_originalHammerLocalPosition; hammerTransform.localEulerAngles = m_originalHammerLocalEulerAngles; m_boppableInterface.TriggerEndAttackTransition(); m_currentTaggingState = _nextTaggingState; }
/// <summary> /// <para>Set this player as KING</para> /// </summary> public void SetAsKing() { if (GameController.instance) { if (GameController.instance.blobGotKingParticle) { Instantiate(GameController.instance.blobGotKingParticle, transform.position, Quaternion.identity).Play(); } PausedMenuManager._instance?.PlaySFX(GameController.instance.blobGotKingSounds[Random.Range(0, GameController.instance.blobGotKingSounds.Length)]); } m_boppableInterface.ChangeSpeed(BaseSpeed, 0f, m_externalSpeedBoost); kingCrown.SetActive(true); m_timesAsKing++; m_isImmune = true; StartCoroutine(SpeedUpRoutine(3f)); StartCoroutine(TurnOffImmunityRoutine(3f)); m_currentTaggingState = ETaggingBehavior.Tagging; }
private void TriggerAttackTransition(float _attackSizeMultiplier = 1.0f) { if (GameController.instance) { PausedMenuManager._instance?.PlaySFX(GameController.instance.blobAttackSounds[Random.Range(0, GameController.instance.blobAttackSounds.Length)]); } if (GameController.instance && GameController.instance.blobAttackParticle) { Instantiate(GameController.instance.blobAttackParticle, hammerBopAim.transform.position, GameController.instance.blobAttackParticle.transform.rotation).Play(); } m_boppableInterface.TriggerAttackTransition(); if (GameController.instance && GameController.instance.attackDecal) { Instantiate(GameController.instance.attackDecal, new Vector3(hammerBopAim.transform.position.x, 0.05f, hammerBopAim.transform.position.z), GameController.instance.attackDecal.transform.rotation); } ETaggingBehavior currentTaggingState = m_currentTaggingState; m_currentTaggingState = ETaggingBehavior.TaggingAtacking; Collider[] bopCollision = Physics.OverlapSphere(hammerBopAim.position, km_attackRadius * _attackSizeMultiplier, attackLayer); if (bopCollision.Length > 0) { for (int i = 0; i < bopCollision.Length; i++) { TaggingIdentifier playerHitted = bopCollision[i].transform.gameObject.GetComponent <TaggingIdentifier>(); if (playerHitted != null && playerHitted.CanBeTagged && m_playerIdentifier != playerHitted.PlayerIdentifier) { // We hit someone, so we bopped them! if (GameController.instance) { PausedMenuManager._instance?.PlaySFX(GameController.instance.blobHitSounds[Random.Range(0, GameController.instance.blobHitSounds.Length)]); } m_playersBopped++; if (taggingManager.WhoIsKing == playerHitted.PlayerIdentifier) { taggingManager.PlayerWasTagged(this, true); playerHitted.SetAsNotKing(); // Updating tagging state because we are tag now. currentTaggingState = m_currentTaggingState; } else { // Just Knockback the Player // TODO Delay here is a magic number // TODO knockback force is also a magic number playerHitted.KnockbackPlayer(Color.magenta, (playerHitted.transform.position - transform.position).normalized * taggingManager.knockbackForce * 3f, 0.5f); } // We break from the loop if we are not using super slam if (_attackSizeMultiplier == 1.0f) { break; } } } } StartCoroutine(AttackAnimationRoutine(currentTaggingState)); }
/// <summary> /// <para>Set this player as NOT TAG</para> /// </summary> public void SetAsNotKing() { kingCrown.SetActive(false); m_boppableInterface.ChangeSpeed(BaseSpeed, 0f, m_externalSpeedBoost); m_currentTaggingState = ETaggingBehavior.Running; }