/// <summary> /// Detects collision with a ball to aim the ball /// </summary> /// <param name="coll">collision info</param> void OnCollisionEnter2D(Collision2D coll) { if (coll.gameObject.CompareTag("Ball") && FrontCollision(coll)) { // add hits to HUD hitPointsAdded.Invoke(side, coll.gameObject.GetComponent <Ball>().Hits); // calculate new ball direction float ballOffsetFromPaddleCenter = coll.transform.position.y - transform.position.y; float normalizedBallOffset = ballOffsetFromPaddleCenter / halfPaddleHeight; float angleOffset = normalizedBallOffset * BounceAngleHalfRange; // angle modification is based on screen side float angle; if (side == ScreenSide.Left) { angle = angleOffset; } else { angle = (float)(Mathf.PI - angleOffset); } Vector2 direction = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); // tell ball to set direction to new direction Ball ballScript = coll.gameObject.GetComponent <Ball>(); ballScript.SetDirection(direction); } }
/// <summary> /// Detects collision with a ball to aim the ball /// </summary> /// <param name="coll">collision info</param> void OnCollisionEnter2D(Collision2D coll) { if (coll.gameObject.CompareTag("Ball") && FrontHitCollision(coll)) { // calculate new ball direction float ballOffsetFromPaddleCenter = coll.transform.position.y - transform.position.y; float normalizedBallOffset = ballOffsetFromPaddleCenter / colliderHalfHeight; float angleOffset = normalizedBallOffset * BounceAngleHalfRange; // angle modification is based on screen side float angle; if (screenSide == ScreenSide.Left) { angle = angleOffset; } else { angle = (float)(Mathf.PI - angleOffset); } Vector2 direction = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); // Adds hits score to appropriate player side hitsAddedEvent.Invoke(screenSide, coll.gameObject.GetComponent <Ball>().Hits); // tell ball to set direction to new direction Ball ballScript = coll.gameObject.GetComponent <Ball>(); ballScript.SetDirection(direction); } // checks for a pickup collision if (coll.gameObject.CompareTag("FreezeEffect")) { FreezePaddle(screenSide, freezeDuration); } }