public void Apply(GameController gc) { switch (type) { case PowerUpType.lenght: gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.lenght); foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } break; case PowerUpType.tripple: foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.normal); GameObject[] clones = new GameObject[gc.balls.Count * 2]; int counter = 0; foreach(GameObject ball in gc.balls) { Rigidbody2D rb2dOriginal = ball.GetComponent<Rigidbody2D>(); GameObject ballClone1 = Instantiate(ball, ball.transform.position, Quaternion.identity) as GameObject; clones[counter++] = ballClone1; Vector2 rndVector = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)); Rigidbody2D rb2d = ballClone1.GetComponent<Rigidbody2D>(); rb2d.velocity = (rb2dOriginal.velocity + rndVector).normalized * rb2dOriginal.velocity.magnitude; GameObject ballClone2 = Instantiate(ball, ball.transform.position, Quaternion.identity) as GameObject; clones[counter++] = ballClone2; rndVector = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)); rb2d = ballClone2.GetComponent<Rigidbody2D>(); rb2d.velocity = (rb2dOriginal.velocity + rndVector).normalized * rb2dOriginal.velocity.magnitude; } gc.balls.AddRange(clones); break; case PowerUpType.speedUp: foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.normal); foreach (GameObject ball in gc.balls) { Rigidbody2D rb2dOriginal = ball.GetComponent<Rigidbody2D>(); rb2dOriginal.velocity = new Vector2(rb2dOriginal.velocity.x + rb2dOriginal.velocity.normalized.x * 2, rb2dOriginal.velocity.y + rb2dOriginal.velocity.normalized.y * 2); } break; case PowerUpType.speedDown: foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.normal); foreach (GameObject ball in gc.balls) { Rigidbody2D rb2dOriginal = ball.GetComponent<Rigidbody2D>(); if (rb2dOriginal.velocity.magnitude >= 3) { rb2dOriginal.velocity = new Vector2(rb2dOriginal.velocity.x - rb2dOriginal.velocity.normalized.x * 2, rb2dOriginal.velocity.y - rb2dOriginal.velocity.normalized.y * 2); } } break; case PowerUpType.sticky: foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.sticky); gc.paddle.GetComponent<PaddleController>().stickyCount = 3; break; case PowerUpType.shooting: gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.shooting); foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } break; case PowerUpType.penetrate: gc.paddle.GetComponent<PaddleController>().ChangeState(PaddleController.PaddlePowerState.normal); foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = true; } break; case PowerUpType.safe: foreach (GameObject ball in gc.balls) { ball.GetComponent<CircleCollider2D>().isTrigger = false; } gc.CreateSafeNet(); break; case PowerUpType.livesUp: gc.UpdateLives(+1); break; case PowerUpType.scoreUp: gc.UpdateScore(+10000); break; default: break; } SFXManager.Instance.PlayOnceAndDestroy(powerUpSound); }