Пример #1
0
    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;
    }
Пример #2
0
    // 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);
        }
    }
Пример #3
0
    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();
    }
Пример #4
0
    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;
        }
    }