private IEnumerator Stun(BallPhysics ball, float time = 0f) { if (ball) { GameAnalytics.AddEvent(character.playerPosition, EventKeys.Stunned); time = (ball.ballSwingPower == SwingPower.Strong ? hitSettings.strongStunTime : hitSettings.lightStunTime); } character.playerStatus = PlayerStatus.Stunned; Color oldColor = sprite.color; stunned = true; character.canMove = false; for (int i = 0; i < hitSettings.fadeIntervals; i++) { sprite.DOColor(new Color(oldColor.r, oldColor.g, oldColor.b, hitSettings.fadePercentage / 100), (time / (hitSettings.fadeIntervals * 2))); yield return(new WaitForSecondsRealtime(time / (hitSettings.fadeIntervals * 2))); sprite.DOColor(new Color(oldColor.r, oldColor.g, oldColor.b, 1), (time / (hitSettings.fadeIntervals * 2))); yield return(new WaitForSecondsRealtime(time / (hitSettings.fadeIntervals * 2))); } character.playerStatus = PlayerStatus.None; stunned = false; character.canMove = true; }
// public override void OnTriggerEnter(Collider other) { // if (other.gameObject.CompareTag("Ball")) { // TriggerHit(other.gameObject.GetComponent<BallPhysics>()); // } // } #endregion #region Methods public override void TriggerHit(BallPhysics ball) { if (character.playerStatus == PlayerStatus.Dashing) { GameAnalytics.AddEvent(character.playerPosition, EventKeys.DashAndHit); } if (character.currentSwingStrength == character.swingType.strongSwing) { GameAnalytics.AddEvent(character.playerPosition, EventKeys.SuccessfulChargedStrike); } if (character.currentSwingStrength == character.swingType.lightSwing) { GameAnalytics.AddEvent(character.playerPosition, EventKeys.FailedChargedStrike); } GameAnalytics.AddEvent(character.playerPosition, EventKeys.HitBall); float multiplier = (ball.transform.position.y > transform.position.y ? Mathf.Lerp(character.swingType.highSwingYMultiplier, 1, Mathf.InverseLerp(transform.position.y + (boxCollider.size.y * 0.5f), transform.position.y, ball.transform.position.y)) : Mathf.Lerp(character.swingType.lowSwingYMultiplier, 1, Mathf.InverseLerp(transform.position.y - (boxCollider.size.y * 0.5f), transform.position.y, ball.transform.position.y))); float swingY = character.swingType.swingY * multiplier; Vector3 newDirection = (Vector3.right * character.input.x * character.swingType.swingX) + (Vector3.up * swingY) + ((character.playerPosition == PlayerPosition.Top ? Vector3.back : Vector3.forward) * character.currentSwingStrength); ball.photonView.RequestOwnership(); ball.currentBounces = 0; ball.ballSwingPower = character.currentCharge; //#region Swing VFX //switch (character.currentCharge) { // case SwingPower.Regular: // AudioManager.instance.PlaySound(ball.ballType.ballHitSound,false,0.8f); // vfx = ball.ballType.mediumShotEffect; // break; // case SwingPower.Strong: // AudioManager.instance.PlaySound(ball.ballType.ballHitSoundHard,false, 0.8f); // vfx = ball.ballType.strongShotEffect; // break; // default: // AudioManager.instance.PlaySound(ball.ballType.ballHitSound,false); // vfx = ball.ballType.weakShotEffect; // break; //} //vfx.Play(ball.transform.position, Vector3.zero); //#endregion ball.velocity = ball.transform.position + newDirection; if (PhotonNetwork.IsConnected) { ball.photonView.RPC(nameof(ball.PlayHitEffect), RpcTarget.All, character.currentCharge.ToString(), ball.transform.position); } else { ball.PlayHitEffect(character.currentCharge.ToString(), ball.transform.position); } }
private IEnumerator HandleGameOver(PlayerPosition backWallHitPosition) { gameOver = true; GameOver?.Invoke(); canRestart = true; var references = FindObjectOfType <ArenaReferences>(); references.topReferences.player.enabled = false; references.bottomReferences.player.enabled = false; GameAnalytics.AddEvent(backWallHitPosition, EventKeys.GameWon); yield return(StartCoroutine(GameOverAnimation(backWallHitPosition == PlayerPosition.Top ? PlayerPosition.Bottom : PlayerPosition.Top, references))); yield return(new WaitForSeconds(waitBeforeGameOverScreen)); StartCoroutine(backgroundGameOverAnimation.Animate(backgroundImage)); resetCanvas.SetActive(true); // top and bottom are inverted victoryName.text = string.Format("{0} Wins!\nPress 'R' or 'Start' to Restart!", backWallHitPosition == PlayerPosition.Top ? references.bottomReferences.characterName.text : references.topReferences.characterName.text).ToUpper(); }
public void Dash() { GameAnalytics.AddEvent(playerPosition, EventKeys.Dash); //Movement vector normalized for simplicity input.Normalize(); //Checking if my dash-to position is valid input = LandingPosition(input); if (input != transform.position) { playerStatus = PlayerStatus.Dashing; animator.SetBool("IsDashing", true); ChangeStrength(currentCharge); switch (orientation) { case SwingOrientation.Right: rightDashSwingCollider.SetActive(true); break; case SwingOrientation.Left: leftDashSwingCollider.SetActive(true); break; } //Play audio sfx movementType.effectCollection.Get("Dash")?.Play(transform.position, Vector3.zero, transform); //Setting the current sprite to be rendered as the particle particleSystemRenderer.material.mainTexture = sprite.sprite.texture; particleSystem.Play(); //Translate the player using the DOTween Plugin transform.DOMove(input, movementType.dashDuration).onComplete = StopDashing; } }